【问题标题】:JPA / Hibernate Query on polymorphic field多态字段上的 JPA / Hibernate 查询
【发布时间】:2013-05-16 10:15:25
【问题描述】:

给定以下类型层次结构:

@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
class A { }

@Entity
class B extends A {
  String b;
}

@Entity
class C extends A {
  String c;
}

@Entity
class D {
  @ManyToOne
  A a;
}

现在我想用 C 类型的 'a' 查询所有 D 类型的记录,并且字段 'c' 等于给定的字符串参数:

...
Root<D> root
CriteriaBuilder cb
cb.equal(root.get("a").get("c").as(String.class), "Test");
...

可以预见,我会收到一个异常,告诉我属性“c”是未知的,因为它没有在超类型 A 中定义。

任何想法,如何告诉 JPA Query 它应该只在 D 处为字段“a”加入 C 并向字段“c”添加条件?

【问题讨论】:

    标签: hibernate jpa polymorphism polymorphic-associations criteria-api


    【解决方案1】:
        CriteriaQuery<Tuple> q = criteriaBuilder.createTupleQuery();
        Root<D> from = q.from(D.class);
        Join<D, A> path = from.join(D_.a);
        q.multiselect(path.get(A_.id)).where(criteriaBuilder.equal(path.type(), C.class));
    

    【讨论】:

      猜你喜欢
      • 2021-12-06
      • 2012-06-15
      • 2010-11-02
      • 2017-10-07
      • 2016-01-28
      • 1970-01-01
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多