4

I have a Hibernate mapping that looks something like this:

<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

Given this, how do I query such that a value of MyEntity.scalarSet (which is Set) is in a another collection.

Something like:

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

[edit] I've also tried Restriction.sqlRestriction(..). The sql query that I used is something like this:

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

Wherein '{expanding?}' is replaced by comma-separated question marks (depending on targetList.size()).

But I'm just getting a

Caused by: org.hibernate.MappingException: collection was not an association: MyEntity.scalarSet

Brian Tompsett - 汤莱恩
  • 5,753
  • 72
  • 57
  • 129
Franz See
  • 3,282
  • 5
  • 41
  • 48

2 Answers2

4

Your set is a collection, not an association mapping - there are subtle but important differences. Using Hibernate's Query API for collections is currently not supported.

You need to either use HQL, or use a one-to-many association mapping by creating an entity with Long property, for example:

public class Scalar {
  private Long value;
  public Long getValue() { .... }
  public void setValue(....) { ....}
}
Stewart
  • 17,616
  • 8
  • 52
  • 80
2

However, someone has written a patch which may or may not end up in Hibernate 3.4

Stewart
  • 17,616
  • 8
  • 52
  • 80