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