次の型階層があるとします。
@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' とフィールド 'c' が特定の文字列パラメーターに等しい、タイプ D のすべてのレコードをクエリしたいと思います。
...
Root<D> root
CriteriaBuilder cb
cb.equal(root.get("a").get("c").as(String.class), "Test");
...
予想通り、属性「c」はスーパータイプ A で定義されていないため、不明であるという例外が発生します。
JPAクエリに、Dのフィールド「a」のCのみに参加し、フィールド「c」に条件を追加する必要があることを伝える方法はありますか?