У меня есть базовая сущность 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. Но функция, над которой я работаю, требует от меня фильтрации результатов из Таблица сотрудников.
Я что-то здесь упускаю?