Hibernate Criteria contains-in 与表的关联

标签 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())。

但我只是得到一个

Caused by: org.hibernate.MappingException: collection was not an association: MyEntity.scalarSet

最佳答案

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

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

public class Scalar {
  private Long value;
  public Long getValue() { .... }
  public void setValue(....) { ....}
}

关于Hibernate Criteria contains-in 与表的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1303157/

相关文章:

java - Spring 4.3.0.RELEASE + Hibernate 5.2.0.Final -Error..根本原因是org.hibernate.PersistentObjectException

symfony - 如何在 Controller 中向 Shopware 6 产品添加新的交叉销售?

jquery - 根据 DIV 内的文本值隐藏 DIV

java - 语法查询异常,对象无法映射

java - Spring在Struts + Spring + Hibernate中的作用是什么?

hibernate - Grails自定义 validator 错误

jquery - 如果 jQuery 中的 url 包含 "x"如何执行函数

grails - 一对多关系的Grails准则动态AND条件

java - org.hibernate.Criteria 一堆扩展 org.hibernate.internal.CriteriaImpl 的 add(Restrictions)

string - 搜索单词而不是字符串?