Question

J'ai un mapping Hibernate qui ressemble à ceci:

<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 défini) est dans une collection autre.

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é par des points d'interrogation séparées par des virgules (selon targetList.size ()).

Mais je suis juste un

  

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

Était-ce utile?

La solution

Votre jeu est une collection, pas une cartographie d'association - il y a des différences subtiles mais importantes. En utilisant l'API de requête de mise en veille prolongée pour les collections est actuellement pas pris en charge .

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(....) { ....}
}

Autres conseils

Cependant, quelqu'un a écrit un qui peuvent ou peuvent ne pas se retrouver dans Hibernate 3.4

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top