JPA: именованный запрос для унаследованных объектов JPA - PullRequest
0 голосов
/ 16 октября 2019

У меня есть объект 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'
    )
;
...