【发布时间】:2021-09-12 13:36:48
【问题描述】:
查询是使用 Predicate 和 Specification 实现构建的,结果是返回的 Page,所示示例是整个数据库结构的简化,足以代表问题。
数据基于Car和Element两个表返回。
过滤后的值基于表 Car 中的数据,该表以一对多的关系链接到表 Elements。
结果应根据表Element 中的值进行排序,但仅限于manufacturer 列具有指示值的行。
如何仅在Element_.manufacturer = 5 和!= 5 条件下按Element_.value 排序,例如将值与null 进行比较或不对其进行排序。
@Getter
@Entity
@Immutable
@Table(name = "f_car")
public class Car {
@Id
private Long id;
private String name;
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "car_id", updatable = false, insertable = false)
private List<Element> elements;
}
@Getter
@Entity
@Immutable
@Table(name = "f_element")
public class Element {
@Id
private Long id;
@Column(name = "car_id")
private Long carId;
private Long manufacturer;
private String value;
}
@AllArgsConstructor
public class SpecForView implements Specification<Car> {
private final String name;
private final Long manufacturerId;
@Override
public Predicate toPredicate(Root<Car> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
Predicate namePredicate = cb.equal(root.get(Car_.name), name);
// TODO: a place in the code to set the sort
}
【问题讨论】:
标签: hibernate predicate specifications hibernate-criteria criteria-api