我有一个包含很多字段、多对一和多对多关系的类,我需要通过一些列(来自这个类和来自连接类的字段)添加动态过滤器,并按这些字段添加排序好。
我在按多对多字段过滤和排序时遇到问题
@Entity
class EntityA {
...
@ManyToMany
@JoinTable (
name = "EntityA_EntityB",
joinColumns = { @JoinColumn(name = "EntityB") },
inverseJoinColumns = { @JoinColumn(name = "entityb_id") }
)
private List<EntityB> bEntities;
...
}
Run Code Online (Sandbox Code Playgroud)
我有规范通过 EntityB.name 过滤 EntityA(我设置了 criteriaQuery.distinct(true) 以防止重复,我没有这个)
public class EntityASpecifications {
//other specifications
...
public static Specification<EntityA> entityBNameContains(String query) {
return (root, criteriaQuery, criteriaBuilder) -> {
if (query == null) {
return criteriaBuilder.conjunction();
}
criteriaQuery.distinct(true);
return getContainsPredicate(criteriaBuilder, root.join("bEntities").get("name"), query);
};
}
private static Predicate getContainsPredicate(CriteriaBuilder criteriaBuilder, Expression<String> field, …Run Code Online (Sandbox Code Playgroud)