Hibernate的条件包含式上的关联表
题
我有一个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(其被设置)的值是在一个另一个集合。
是这样的:
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?})"
其中, '{扩大?}' 由逗号分隔的问号(取决于targetList.size())。
替换但我刚开
引起的:org.hibernate.MappingException:收集是不是关联:MyEntity.scalarSet
解决方案
您设定的是一个集合,而不是关联映射 - 有微妙但重要的区别。使用Hibernate的查询API的藏品是目前不支持。
您需要要么使用HQL,或通过产生具有长属性的实体使用一个一对多关联映射,例如:
public class Scalar {
private Long value;
public Long getValue() { .... }
public void setValue(....) { ....}
}
其他提示
然而,有人写一个补丁其可能或可能不处于休眠3.4最终
不隶属于 StackOverflow