On 9/7/05, Daniel Perry <[EMAIL PROTECTED]> wrote:

> The following works fine:
> 
> /**
>  * @ojb.field jdbc-type="INTEGER"
>  *
> conversion="org.apache.ojb.broker.accesslayer.conversions.Boolean2IntFieldCo
> nversion"
>  */
> protected boolean deleted;
> 
> But, if you use:
> 
> @ojb.field jdbc-type="TINYINT"
> 
> Then, xdoclet does as it should:
> 
>     <field-descriptor
>         name="deleted"
>         column="deleted"
>         jdbc-type="TINYINT"
> conversion="org.apache.ojb.broker.accesslayer.conversions.Boolean2IntFieldCo
> nversion"
>     >
> 
> And ojb dies (although i am kinda sympathetic as it is using Boolean2Int,
> not Boolean2Tinyint!):
> 
> [PersistentField] ERROR: while set field:
> [try to set 'object value' in 'target object'
> target obj class: com.netcase.pol.bo.User
> target field name: deleted
> target field type: boolean
> target field declared in: com.netcase.pol.bo.BaseBO
> object value class: java.lang.Byte
> object value: 0
> ]
> 
> ...
> 
> Caused by: java.lang.IllegalArgumentException
>         at
> sun.reflect.UnsafeBooleanFieldAccessorImpl.set(UnsafeBooleanFieldAccessorImp
> l.java:68)
>         at java.lang.reflect.Field.set(Field.java:656)
>         at
> org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldDirectAccessImplNe
> w.setValueFor(PersistentFieldDirectAccessImplNew.java:213)


Ah, ok, now it is clear. This has nothing to do with XDoclet at all,
rather the conversion that you specified, is wrong because it converts
between boolean/java.lang.Boolean and int/java.lang.Integer. The
problem arises because the JDBC driver returns a java.lang.Byte object
for the TINYINT column and not an java.lang.Integer object that the
conversion expects.
Therefore you'll have to either use BIT as the JDBC column type or
write your own Boolean2Byte conversion (simply copy the code of the
Boolean2Int conversion and replace Integer with Byte).

Tom

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to