【问题标题】:Getting the field of a child object from a parent object in criteria query. (Hibernate/Persistence)从条件查询中的父对象获取子对象的字段。 (休眠/持久性)
【发布时间】:2019-07-20 22:17:19
【问题描述】:

我有一个对象 (A),它有一个包含另一个 object (B) 的字段,而 B 有一个 long 类型的字段。我希望能够在条件查询中访问 B 的长类型字段。

在示例代码中,我们看到了如何获取对象的字段,但是有没有办法以与示例代码类似的方式获取 objectA.objectB.field?

我找到了这个示例代码:

CriteriaQuery<Integer> criteria = builder.createQuery( Integer.class );
Root<Person> personRoot = criteria.from( Person.class );
criteria.selec(1)t( builder.max( personRoot.get( Person_.age ) ) );
criteria.where( builder.equal( personRoot.get( Person_.eyeColor ), "brown" ) );
Integer maxAge = em.createQuery( criteria ).getSingleResult();

【问题讨论】:

    标签: java hibernate jpa persistence


    【解决方案1】:

    通过指定连接类型从根创建连接

    Join<ObjectA, ObjectB> objectBJoin = personRoot.join("objectB", JoinType.INNER);
    

    【讨论】:

    • 对象 A 和对象 B 并不是字面上独立的对象。对象 B 是对象 A 的字段之一的值。所以我不明白这是如何做到我要求的。
    • 可以通过criteria.where(builder.equal(objectBJoin.get("FieldInObjectB"), "value")访问子类中的字段
    【解决方案2】:

    答案是我们可以在每个函数内部使用多个 get 函数。

    例子:

    criteria.where(builder.equal(ParentClass.get("ChildClass").get("FieldOfChildClass"), "value" ));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多