2009-08-19 5 views
2

J'ai un mapping Hibernate qui ressemble à ceci:critères Hibernate contient-in sur une association à une table

<class name="MyEntity"> 
    <set name="scalarSet" table="(select fk, scalar_value from other_table)"> 
    <key column="fk"/> 
    <property column="scalar_value" type="long"/> 
    </set> 
</class 

Compte tenu de cela, comment puis-je demander de telles qu'une valeur de MyEntity.scalarSet (qui est Set) est dans une autre collection.

Quelque chose comme:

criteria.add(Restrictions.in("scalarSet", targetList)); 

[modifier] J'ai aussi essayé Restriction.sqlRestriction (..). La requête SQL que j'ai utilisé est quelque chose comme ceci:

"1 == (select fk, scalar_value from other_table where fk = {alias}.id and scalar_value in ({expanding?})" 

En quoi « {?} Expansion » est remplacée par des points d'interrogation séparées par des virgules (selon targetList.size()).

Mais je suis juste un

Causée par: org.hibernate.MappingException: collection n'a pas été une association: MyEntity.scalarSet

Répondre

3

Votre jeu est une collection, et non une association cartographie - il existe des différences subtiles mais importantes. L'utilisation de l'API Query d'Hibernate pour les collections est actuellement not supported.

Vous devez soit utiliser HQL, ou utiliser un à plusieurs cartographie d'association en créant une entité à la propriété Long, par exemple:

public class Scalar { 
    private Long value; 
    public Long getValue() { .... } 
    public void setValue(....) { ....} 
} 
+1

Merci, après avoir piraté la source de Hibernate, voici ce que j'ai fini par faire :-) –

2

Cependant, quelqu'un a écrit un patch qui peut ou Pas de fin à Hibernate 3.4

Questions connexes