Hibernate Criteria包含与表的关联

时间:2009-08-19 23:23:06

标签: hibernate criteria contains scalar

我有一个看起来像这样的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

2 个答案:

答案 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中结束