JpaSpecificationExecutor JOIN + ORDER BY in Specification

前端 未结 1 1582
你的背包
你的背包 2020-12-09 11:34

I have a query using a JOIN and ORDER BY and want to use it within my repository using the Criteria Api.

Here I found, how to wrap such a query into a CriteriaQuery

相关标签:
1条回答
  • 2020-12-09 12:07

    Try something like this (I assumed pet has many owners):

    public static Specification<Pet> ownerNameEqual(String ownerName) {
            return new Specification<Pet>() {
                @Override
                public Predicate toPredicate(Root<Pet> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                    Join<Pet, Owner> owners = root.join("owners");
                    criteriaQuery.orderBy(criteriaBuilder.desc(root.get("id")));
                    return criteriaBuilder.equal(owners.get("name"), ownerName);
                }
            };
        }
    

    This is just an example to search all pets whose at least one owner has name equal to ownerName

    But you could add a method List<Pet> findByOwnersNameOrderByIdDesc(String ownerName); in your repository instead (as an equivalent to Specification).

    0 讨论(0)
提交回复
热议问题