小编asc*_*chi的帖子

规范中的JpaSpecificationExecutor JOIN + ORDER BY

我有一个使用JOIN和ORDER BY的查询,并希望使用Criteria Api在我的存储库中使用它.

在这里,我发现,如何将这样的查询包装到CriteriaQuery(链接)中.

CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
Root<Pet> pet = cq.from(Pet.class);
Join<Pet, Owner> owner = cq.join(Pet_.owners);
cq.select(pet);
cq.orderBy(cb.asc(owner.get(Owner_.lastName),owner.get(Owner_.firstName)));
Run Code Online (Sandbox Code Playgroud)

另一方面,我发现了一些使用Criteria Api和JpaRepository(示例)的示例.

问题是存储库中的所有方法都需要一个规范:

T findOne(Specification<T> spec);
Run Code Online (Sandbox Code Playgroud)

总是像这样构建:

public static Specification<PerfTest> statusSetEqual(final Status... statuses) {
    return new Specification<PerfTest>() {
        @Override

        public Predicate toPredicate(Root<PerfTest> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
            return cb.not(root.get("status").in((Object[]) statuses));
        }
    };

}
Run Code Online (Sandbox Code Playgroud)

所以在一方面我知道如何创建CriteriaQuery,另一方面我需要一个从Predicate构建的规范,我无法弄清楚如何将CriteriaQuery解析为Specification/Predicate.

java mysql jpa criteria-api spring-data-jpa

11
推荐指数
1
解决办法
2万
查看次数

标签 统计

criteria-api ×1

java ×1

jpa ×1

mysql ×1

spring-data-jpa ×1