У меня есть три разных сущности (таблица), как показано ниже:
- EMPLOYEE
- EMPLOYEE_HIKES
- EMPLOYEE_HIKE_TYPE
Код: Выделить всё
@Entity
@Table(name = "employee")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "EMP_ID")
private Integer employeeId;
@OneToMany
@JoinColumn(name = "EMPLOYEE_HIKE_ID")
private List employeeHike;
// some other entities mapping and other columns
// getters and setters
}
Код: Выделить всё
@Entity
@Table(name = "employee_hikes")
public class EmployeeHike {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "EMPLOYEE_HIKE_ID")
private Integer hikeId;
@OneToOne
@JoinColumn(name = "HIKE_TYPE_ID")
private EmployeeHikeType hikeTypeId;
@Column(name = "IS_ACTIVE")
private Boolean isActive;
// getters and setters
}
Код: Выделить всё
@Entity
@Table(name = "employee_hike_type")
public class EmployeeHikeType {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "HIKE_TYPE_ID")
private Integer hikeTypeId;
@Column(name = "HIKE_TYPE_NAME")
private String hikeTypename;
// some other columns
// getters and setters
}
EmployeeSpecification.java
Код: Выделить всё
public class EmployeeSpecification implements Specification {
@Override
public Predicate toPredicate (Root, CriteriaQuery query, CriteriaBuilder cb) {
List
predicates = new ArrayList();
Predicate hikeTypeIdPredicate = root.join("employeeHike").join("hikeTypeId").get(hikeTypeId).in();
Predicate hikeActivePredicate = root.join("employeeHike").get("isActive").in(1);
predicates.add(hikeActivePredicate);
predicates.add(hikeTypeIdPredicate);
// joins for other entities here
return cb.and(predicates.toArray(new Predicate[0]));
}
}
Фактический результат: Приведенный выше код возвращает список всех сотрудников на основе только значений типа повышения, и он не фильтруется на основе активного предиката.
Пожалуйста, прокомментируйте, если вам нужна дополнительная информация. Заранее спасибо за помощь.
Подробнее здесь: https://stackoverflow.com/questions/786 ... sing-speci
Мобильная версия