JpaSpecificationExecutor JOIN +, UM DURCH die in der Spezifikation

Ich habe eine Abfrage mit einem JOIN und ORDER BY und möchte es in meinem repository unter Verwendung der Kriterien-Api.

Hier fand ich, wie wickeln Sie eine solche Abfrage in einer CriteriaQuery (Link).

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

Auf der anderen Seite, fand ich einige Beispiele zur Verwendung der Kriterien-Api in Kombination mit einer JpaRepository (Beispiel).

Das Problem ist, dass alle Methoden, die im repository erwarten Spezifikation:

T findOne(Specification<T> spec);

die bauen immer so:

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

}

Also auf der einen Seite weiß ich, wie man erstellen Sie eine CriteriaQuery, und auf der anderen Seite brauche ich eine Spezifikation, die aufgebaut ist aus einem Prädikat, und ich kann nicht herausfinden, wie zu analysieren, die CriteriaQuery in eine Spezifikation/Prädikat.

InformationsquelleAutor aschi | 2016-05-13

Schreibe einen Kommentar