java - 对 child 有限制的 hibernate 标准

标签 java hibernate orm hibernate-criteria

我有一个 Hibernate 标准调用,我想在一个 SQL 语句中执行。我想要做的是选择 Parent 的实例,这些实例的 Children 的属性在一个值范围内(SQL IN 子句),同时使用外部连接加载子实例。这是我到目前为止所拥有的:

 Criteria c = session.createCriteria(Parent.class);

 c.createAlias("children", "c", CriteriaSpecification.LEFT_JOIN)
          .setFetchMode("c", FetchMode.JOIN)
          .add(Restrictions.in("c.property", properties));

 c.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

 return c.list();

这是一些示例数据:

Parent
Parent ID
A
B
C

Children
Child ID    Parent ID   property
...         A           0
...         A           2
...         A           7
...         B           1
...         C           1
...         C           2
...         C           3

我想做的是返回 parent 和他们所有的 child ,如果其中一个 child 的属性等于我的绑定(bind)参数。假设 properties 是一个包含 {2} 的数组。在这种情况下,调用将返回父 A 和 C,但它们的子集合将仅包含元素 2。即父[子]:

A[2] & C[2]

我想要的是:

A[0, 2, 7] & C[1, 2 3]

如果这不是一个错误,它似乎是一个错误的语义。我不明白如何调用 A.getChildren() 或 C.getChildren() 并返回 1 条记录会被认为是正确的——这不是预测。 IE。如果我扩充查询以使用默认的选择提取,它会返回正确的子集合,尽管有大量查询:

  c.createAlias("children", "c").add(
      Restrictions.in("c.property", properties));

这是一个错误吗?如果没有,我怎样才能达到我想要的结果?

最佳答案

        Criteria c = session.createCriteria(Parent.class);

    c.createAlias("children", "children");
    c.add(Restrictions.in("children.property", properties));

     c.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

     return c.list();

关于java - 对 child 有限制的 hibernate 标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7003861/

相关文章:

Java 获取当前日期不带时间戳的程序

java - 如何使用注释在 Hibernate 中映射映射列表?

php - Laravel 关系返回 null

sql-server - SQL Alchemy 检查连接

java - 在hibernate中,是否可以在构造函数中保留一个对象?

JavaEE面向对象网络

Java FragmentTransaction 类

java - java.lang.String类型的JSON异常值连接无法转换为JSONArray

hibernate - 没有名为 'entityManagerFactory' 的可用 bean

java - ManyToMany 的 MappingException