Je suis vraiment nouveau avec Hibernate. Je veux un List<User>
Utilisation de critères hibernés, mais uniquement avec les champs ID utilisateur et nom rempli. Est-ce possible? Quelque chose comme la requête indiquée ci-dessous:
SELECT user.id, user.name FROM user
Salutations.
C'est exactement ce que font les projections pour. Voici un exemple:
Criteria cr = session.createCriteria(User.class)
.setProjection(Projections.projectionList()
.add(Projections.property("id"), "id")
.add(Projections.property("Name"), "Name"))
.setResultTransformer(Transformers.aliasToBean(User.class));
List<User> list = cr.list();
En fait, si vous regardez la documentation de "Propriété paresseuse récupération", ils disent spécifiquement:
"Une autre voie différente (meilleure?) D'éviter les lectures de colonne inutiles, au moins pour que les transactions en lecture seule consiste à utiliser les fonctions de projection des requêtes de HQL ou de critères. Cela évite le traitement de la nécessité d'une solution de byTecode de construction et est certainement une solution préférée."
À propos, il existe une question connexe que vous pourriez également être intéressée par: Query hibernate par exemple et projections
Je suis vraiment en retard qui répond à cela, mais vous pouvez ajouter un transformateur de résultat personnalisé sur l'objet de requête comme ci-dessous.
Query query = session
.getNamedQuery(
"someNamedQueryWhichISHQL")
.setString("cod", "10")
.setResultTransformer(new ResultTransformer() {
public Object transformTuple(Object[] row, String[] arg1) {
User usr = new User(row[0],row[1]);
return usr
}
public List transformList(List arg0) {
return arg0;
}
});
return query.list();
Généralement, vous ne voulez pas charger partiellement les propriétés d'un objet. Mais si vous devez, voyez ceci:
Pour un comportement semblable à un rapport simple, vous pouvez utiliser des requêtes d'entité:
sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").addEntity(Cat.class);
http://docs.jboss.org/ibernate/stable/core/manual/en-us/html/QuerySQL.html#d0e176