2010-01-26 6 views
1

J'ai le graphique suivant:requête avec restriction sur un problème sous-classe a rejoint

OrderLine 
    OrderLineExtension 
     OrderLineExtensionA 
     OrderLineExtensionB 
     OrderLineExtensionC 

OrderLine contient un ensemble de OrderLineExtension.
OrderLineExtension est défini comme: @Inheritance (stratégie = InheritanceType.JOINED) et est marqué comme étant une entité abstraite et est

Une table est créée dans la base de chacune de ces classes de la hiérarchie.

J'essaie d'effectuer une requête où le nom de l'article sur OrderLine est "item", mais où est orderReferenceNumber "orderRef" dans OrderLineExtensionA.

Je ne suis pas sûr de savoir comment passer de OrderLine à OrderLineExtensionA car il n'y a pas de référence java de OrderLineExtension à OrderLineExtensionA.

J'ai jusqu'ici obtenu ceci qui bien sûr ne fonctionne pas.

filter=DetachedCriteria.forClass(OrderLine.class); 
    .add(Restrictions.eq("item", "item")); 
    .createCriteria("orderLineExtension") 
     .add(Restrictions.eq("orderReferenceNumber", "orderRef")); 

Cette mise en veille prolongée échoue comme se plaint qu'il ne peut pas trouver orderReferenceNumber dans orderLineExtension de classe qui est vrai qu'il est dans orderLineExtensionA. Mais, comment je traverse à l'extension? Je ne peux pas imbriquer un autre createCriteria car il n'y a pas de référence dans la superclasse à la sous-classe.

Toute aide serait appréciée.

Répondre

0

Oups, ne vous inquiétez pas. Ce problème a été soulevé parce que je n'avais pas réalisé qu'un collègue avait créé le même champ dans chaque sous-classe jointe. Hibernate va juste aller à la première sous-classe pour charger la propriété. C'est pourquoi je récupérais la mauvaise instance. Maintenant que nous les avons renommés, tout fonctionne très bien. J'avais la tête grattante pendant un moment cependant.