JpaSpecificationExecutor JOINDRE à + COMMANDE PAR dans la Spécification
J'ai une requête à l'aide d'une JOINTURE et de l'ORDRE PAR et souhaitez l'utiliser dans mon référentiel à l'aide de l'Api criteria.
Ici que j'ai trouvé, comment envelopper une telle requête dans une CriteriaQuery (Lien).
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)));
De l'autre côté, j'ai trouvé quelques exemples à utiliser les Critères de l'Api en Combinaison avec un JpaRepository (exemple).
Le Problème est que toutes les méthodes dans le référentiel s'attendre à un cahier des charges:
T findOne(Specification<T> spec);
qui est toujours à construire comme ceci:
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));
}
};
}
Donc d'un côté je sais comment créer un CriteriaQuery, et de l'autre côté j'ai besoin d'un cahier des charges construire à partir d'un Prédicat, et je ne peux pas comprendre comment analyser la CriteriaQuery dans un cahier des charges/Prédicat.
OriginalL'auteur aschi | 2016-05-13
Vous devez vous connecter pour publier un commentaire.
Essayer quelque chose comme cela (je suppose animal a beaucoup de propriétaires):
C'est juste un exemple, pour rechercher tous les animaux dont au moins un propriétaire qui a le nom de l'égalité de ownerName
Mais vous pouvez ajouter une méthode
List<Pet> findByOwnersNameOrderByIdDesc(String ownerName);
dans votre référentiel de la place (comme un équivalent de la Spécification).OriginalL'auteur Jakub Bibro