Le printemps des Données de Spécification JPA pour Sélectionner des Colonnes
Nous pouvons sélectionner des colonnes spécifiques par écrit custom @méthodes de Requête dans notre Référentiel de l'Interface. Cependant, je ne veux pas écrire de sorte que beaucoup de méthodes pour les différentes propriétés.
J'ai essayé ceci, mais il renvoie à l'ensemble de l'objet de tous les temps.
public class MySpecifications {
public static Specification<MyInfo> propertiesWithId(final String[] properties, final Object id, final String idProperty)
{
return new Specification<MyInfo>() {
@Override
public Predicate toPredicate(Root<MyInfo> root,
CriteriaQuery<?> query, CriteriaBuilder cb) {
query = cb.createTupleQuery(); //tried cb.createQuery(MyInfo.class); as well
List<Selection<? extends Object>> selectionList = new ArrayList<Selection<? extends Object>>();
for (String property : properties) {
Selection<? extends Object> selection = root.get(property);
selectionList.add(selection);
}
return query.multiselect(selectionList).where(cb.equal(root.get(idProperty), id)).getRestriction();
}
};
}
}
utilisé comme:
MyInfo findOne(Specification(properties,idValue, idProperty));
Est-ce la bonne manière? Où est l'erreur?
OriginalL'auteur Chinmay | 2014-03-04
Vous devez vous connecter pour publier un commentaire.
Le courant du printemps des données de spécification jpa exécuteur testamentaire est limitée aux critères de la clause where, de sorte que vous pouvez modifier les colonnes sélectionnées, il est limité à plein entités. Vous aurez à aller avec un référentiel de mise en œuvre, ou de passer à des requêtes nommées-
Spring Data JPA et Querydsl pour récupérer sous-ensemble de colonnes à l'aide de fèves/constructeur de projection
OriginalL'auteur chrismarx
Cette méthode retourne seule entité correspondant spécification donnée. Veuillez vérifier ici
Selon ma compréhension c'est la bonne façon. U peut accéder aux propriétés de l'entité à la normale (par exemple. MyInfo.getIdProperty())
OriginalL'auteur yohan_f