我有一个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最终

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top