Mysql
 sql >> Datenbank >  >> RDS >> Mysql

JpaSpecificationExecutor JOIN + ORDER BY in der Spezifikation

Versuchen Sie so etwas (ich nahm an, dass das Haustier viele Besitzer hat):

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);
            }
        };
    }

Dies ist nur ein Beispiel für die Suche nach allen Haustieren, deren Name mindestens einem Besitzer gleich ownerName ist

Aber Sie könnten eine Methode List<Pet> findByOwnersNameOrderByIdDesc(String ownerName); hinzufügen stattdessen in Ihrem Repository (als Äquivalent zu Specification).