Hi Robert:
As you suggested, this is the old int/Integer problem. In OJB the prefered
way is to avoid primitives datatypes (as int, boolean) and use only Object
datatypes (as Integer, Boolean).
I think the problem can be solved at the docs. If not then how we can test
a int to null in Java? ;)
Best Regards,
Antonio Gallardo
Coup, Robert Muir dijo:
> Hi,
>
> I think I found a minor bug in the optimistic locking (OL)
> code/documentation
>
> If you initialise an int field to use OL (locking="true") then updates
> will fail if the field is null, either silently or with a
> LockNotGrantedException.
>
> public class MyClass {
> private Integer id;
> private int ojbVersion;
> }
>
> <class-descriptor class="MyClass" table="MyClassTable">
> <field-descriptor name="id" column="id" jdbc-type="INTEGER"
> primarykey="true" autoincrement="true"/>
> <field-descriptor name="ojbVersion" column="ojb_version"
> jdbc-type="INTEGER" locking="true"/> </class-descriptor>
>
> If a new object is created and persisted, the ojb_version field is set
> to 1 If another app inserts a record and the ojb_version field is null,
> when it is persisted then this SQL gets executed.
> UPDATE MyClassTable SET ojb_version='1', ... WHERE id='723' AND
> ojb_version='0'
>
> Sometimes this throws an exception, othertimes it seems to silently
> fail.
>
> Obviously it's the old int/Integer thing :)
> But in
> http://db.apache.org/ojb/faq.html#How%20to%20set%20up%20Optimistic%20Loc
> king it has: private int versionMaintainedByOjb
>
> Should the docs be changed to 'private Integer versionMaintainedByOjb'?
> If so, will it have issues 'incrementing' a null value? Or should in the
> docs it state 'make this table field default to a non-null value (eg.
> 0)'? Or should the code be doing 'UPDATE MyClassTable SET
> ojb_version='1', ... WHERE id='723' AND (ojb_version='0' OR ojb_version
> is NULL)'?
>
> Thanks,
>
> Rob :)
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]