我有一个看起来像这样的Hibernate映射:
<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
鉴于此,我如何查询MyEntity.scalarSet(即Set)的值是否在另一个集合中。
类似的东西:
criteria.add(Restrictions.in("scalarSet", targetList));
[编辑] 我也尝试过Restriction.sqlRestriction(..)。我使用的SQL查询是这样的:
"1 == (select fk, scalar_value from other_table where fk = {alias}.id and scalar_value in ({expanding?})"
其中'{expanding?}'被逗号分隔的问号取代(取决于targetList.size())。
但我只是得到了一个
引起:org.hibernate.MappingException:collection不是关联:MyEntity.scalarSet
答案 0 :(得分:3)
您的集合是一个集合,而不是关联映射 - 存在微妙但重要的差异。目前使用Hibernate的查询API进行收集not supported。
您需要使用HQL,或通过创建具有Long属性的实体来使用一对多关联映射,例如:
public class Scalar {
private Long value;
public Long getValue() { .... }
public void setValue(....) { ....}
}
答案 1 :(得分:2)
然而,有人写了一个patch,可能会或可能不会在Hibernate 3.4中结束