Запросы к полям сущностей подкласса с использованием критериев API - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть базовая сущность Employee, подобная этой.

@Entity  
@Table(name="EMPLOYEE")  
@Inheritance(strategy=InheritanceType.JOINED)  
@DiscriminatorColumn(name='EMP_TYPE', discriminatorType=DiscriminatorType.STRING)
public class Employee implements Serializable {  

    @Id   
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id")
    private Long id;  

    private String e_name;  

Есть другая сущность ActiveEmployee, которая расширяет Employee.

@Entity
@Table(name = "ACTIVE_EMPLOYEE")
@PrimaryKeyJoinColumn("id")
@DiscriminatorValue("ACTIVE")
public class ActiveEmployee extends Employee {  

    private int e_salary;  
    private int e_experience;  

    @ToString.Exclude
    @ManyToOne
    @JoinColumn(name='SCHEDULES')
    private Schedules schedules;

Я пытаюсь создать функцию поиска для этой системы. Я пытаюсь найти / отфильтровать сотрудников (я ищу в таблице сотрудников) по одному из столбцов в таблице расписаний для ActiveEmployee.

Вот как я это пробовал.

public Specification<Employee> getByScheduleCode(String value) {
    return (root, cb, query) -> {
        Root<ActiveEmployee> activeE = cb.treat(root, ActiveEmployee.class);

        Join<ActiveEmployee, Schedules> activeSchedJoin = activeE.join("schedules", JoinType.INNER);
        return cb.and(cb.equal(activeSchedJoin.get("code"), value));
    };
}

Даже после использования (cb.treat (root, ActiveEmployee.class) я получаю следующую ошибку.

org.hibernate.QueryException: could not resolve property: schedules of com.myproject.entity.Employee

Ясно, что атрибут schedules все еще просматривается в базовой таблице Employee и не таблица ActiveEmployee, даже после использования (cb.treat (root, ActiveEmployee.class)

Я знаю, что могу выполнять прямой поиск в таблице ActiveEmployee. Но функция, над которой я работаю, требует от меня фильтрации результатов из Таблица сотрудников.

Я что-то здесь упускаю?

...