Utiliser moins de colonnes sur requête SQL via Hibernate Projections sur l'Entité de relation ManyToOne

Je suis en train de construire une petite SQL, pour éviter le "select * from" qui est en train de construire par défaut pour hibernate Critères.

Si j'utilise des champs simples (aucun rapport), par le biais de "Transformers", j'ai peut gérer à avoir ce SQL:

select description, weight from Dog;

Salut, j'ai cette Entité:

@Entity
public class Dog
{
   Long id;
   String description;
   Double weight;
   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "person_id", nullable = false)
   Person owner;
}

@Entity
public class Person
{
   Long id;
   String name;
   Double height;
   Date birthDate;
}

Mon objectif est de faire ceci:

select description, weight, owner.name from Dog

J'ai essayé cela avec avec des Critères et sous-critères):

Criteria dogCriteria = sess.createCriteria(Dog.class);
ProjectionList proList = Projections.projectionList();
proList.add(Projections.property("description"), description);
proList.add(Projections.property("weight"), weigth);
dogCriteria.setProjection(proList);

Criteria personCriteria = dogCriteria.createCriteria("owner");
ProjectionList ownerProList = Projections.projectionList();
ownerProList.add(Projections.property("name"), description);    
dogCriteria.setProjection(ownerProList);  //After this line,  debugger shows that the
                                          //projection on dogCriteria gets overriden
                                          //and the query fails, because "name" is
                                          //not a field of Dog entity.

Comment dois-je utiliser les Projections, pour obtenir une plus petite SQL, moins de colonnes ?
Merci à l'avance.

OriginalL'auteur Awi | 2009-10-24