У меня есть объект University
, имеющий список абстрактных Person
. Существует две реализации Student
и Professor
. Теперь я хотел бы найти все университеты без какого-либо студента по запросу JPA.
Университетский класс
@Entity
public class University {
@OneToMany(targetEntity = Person.class,
cascade = CascadeType.ALL,
fetch = FetchType.EAGER,
mappedBy = "university",
orphanRemoval = true)
private List<Person> persons = new ArrayList<>();
}
Аннотация Лицо класса
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type")
public abstract class Person {
@OneToOne(fetch = FetchType.LAZY)
private University university;
}
Реализация студентов
@Entity
@DiscriminatorValue("STUDENT")
public class Student extends Person {
@NotNull
private String matriculation;
}
Собственный запрос SQL будет выглядеть следующим образом. Но я понятия не имею, как перевести это в именованный запрос JPA или - тоже хорошо - в Criteria API.
select *
from university
where id not in (
select distinct u.id
from university u
join person p on u.id = p.university_id
where p.type = 'STUDENT'
)
;