4

我有一个看起来像这样的 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:集合不是关联:MyEntity.scalarSet

4

2 回答 2

4

您的集合是一个集合,而不是关联映射 - 存在细微但重要的差异。当前不支持使用 Hibernate 的 Query API 进行集合。

您需要使用 HQL,或者通过创建具有 Long 属性的实体来使用一对多关联映射,例如:

public class Scalar {
  private Long value;
  public Long getValue() { .... }
  public void setValue(....) { ....}
}
于 2009-09-03T08:56:38.890 回答
2

但是,有人编写了一个补丁,它可能会或可能不会在 Hibernate 3.4 中结束

于 2009-09-03T09:28:30.513 回答