Re: Bugs in 1.0.5rc1

Armin Waibel <[email protected]> Thu, 06 Mar 2008 16:57:16 +0100
Newsgroups gmane.comp.jakarta.ojb.user
Message-ID <[email protected]>
Hi Sascha,

thank you very much for testing the RC1!

Sascha Broich wrote:
> Hello,
> 
> I found a bug in
> org.apache.ojb.broker.core.CollectionTypes#getCollectionClass(Collection
> Descriptor).
> The "isAssignableFrom" check has to be inverted. 
> For instance: 
> HashSet.class.isAssignableFrom(Set.class) yields false and a
> MetadataException is thrown.
> Inverted to Set.class.isAssignableFrom(HashSet.class) yields true and
> the correct branch gets entered.

The method CollectionTypes#getCollectionClass is correctly implemented. 
First this method checks for user specific collection class 
implementations (implementations of ManageableCollection), then this 
method try to resolve the collection class implementations for 1:n and 
m:n collection-fields (of type Collection, List, Set or array types) of 
persistence capable classes.

The "real bug" is a typo in the OJB.properties file:
replace
CollectionTypes.OneToManySet=org.apache.ojb.broker.util.collections.ManageableSet
with
CollectionTypes.OneToManySet=org.apache.ojb.broker.util.collections.ManageableHashSet

I will fix this ASAP. Thanks again.


> 
> 
> Another bug is in the statement creation when a subclass is involved.
> Note: A0 is the subclass table from A1, PHB_USRID exists only in A1
> 
> 1.0.4 creates something like
> 
> SELECT
>         A0.PHB_ID         ,
>         A1.PHB_USRID      ,
> FROM
>         IPT_PHONEBOOKCSV A0
>         INNER JOIN IPT_PHONEBOOK A1
>         ON
>                 A0.PHB_ID = A1.PHB_ID
> WHERE
>         PHB_USRID IS NULL
> 
> 
> 
> 1.0.5rc1 creates
> 
> SELECT
>         A0.PHB_ID         ,
>         A1.PHB_ID         ,
>         A1.PHB_USRID      ,
> FROM
>         IPT_PHONEBOOKCSV A0
>         INNER JOIN IPT_PHONEBOOK A1
>         ON
>                 A0.PHB_ID = A1.PHB_ID
> WHERE
>         A0.PHB_USRID IS NULL
> 
> 
> The WHERE criteria assignment to A0 the statement produces an exception
> for the nonexisting column A0.PHB_USRID.
> 
> Note, that in the SELECT of 1.0.5rc1 is also A1.PHB_ID, which is not in
> the statement of 1.0.4.

If PHB_USRID only exists in A1 then A1 is a subclass of (super) class 
A0. In this case it's not allowed to build a query with target class A0 
and fields only existing in A1.
Is this the case? If not, please post some more details (java pseudo 
code, class mapping).

regards,
Armin

> 
> 
> Regards,
> Sascha Broich
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> 
>