2

Учитывая следующий тип иерархия:JPA/Hibernate Query на полиморфного поле

@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; 
} 

Теперь я хотел бы запросить все записи типа D с «а» типа C и «с» поля равна заданной строки параметр:

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

в обозримом будущем, я получаю исключение говорит мне, что атрибут «с» неизвестно, так как он не определен в супертип А.

Любые идеи, как сказать JPA Query, что это должен только j oin C для поля 'a' в D И добавить условие к полю 'c'?

ответ

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)); 
Смежные вопросы