小编Vla*_*huk的帖子

JPA规范+多对多字段的动态排序,无重复

我有一个包含很多字段、多对一和多对多关系的类,我需要通过一些列(来自这个类和来自连接类的字段)添加动态过滤器,并按这些字段添加排序好。

我在按多对多字段过滤和排序时遇到问题

@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)

java jpa

3
推荐指数
1
解决办法
1381
查看次数

标签 统计

java ×1

jpa ×1