2010-05-07 6 views
1

La première partie est COMMENT PROJECTER LES COLLECTIONS? Peut-on appliquer des projections sur les éléments de collection? Pour par exemple Projections pour les collections et les projections imbriquées

class User{ 
    private address List<Address>; 
} 

class Address{ 
    private String city; 
    private String state; 
} 

Maintenant, je peux charger simplement l'attribut d'adresse de classe utilisateur? code en utilisant comme:

criteria.setProjection(Projections.property("Address"));

Mais il me retourne toujours nulle, même si l'objet ne possède un ensemble de champs d'adresse. Existe-t-il une manière différente de projeter des objets de collection?

LA DEUXIÈME PARTIE: PROJECTIONS MISÉES. Considérons le même modèle que ci-dessus, mais au lieu d'avoir une collection d'adresses, il y a un seul élément. Maintenant, que faire si je veux simplement charger l'attribut "city" de l'adresse qui fait partie de la classe User ??

J'ai essayé de faire:

Projections.property("Address.City") 

Mais il me donne l'erreur, indiquant ne pouvait pas résoudre la propriété: "Address.City" de l'utilisateur.

Y a-t-il des dispositions pour la projection des éléments de la collection et des projections imbriquées?

Répondre

1

Hibernate est sensible à la casse. donc au lieu de A ddress. C ité, utiliser une adresse. c ité. Si cela ne fonctionne pas, essayez d'utiliser un alias, comme:

DetachedCriteria criteria = DetachedCriteria.forClass(User.class); 
criteria.createAlias("address", "addAlias"); 
criteria.setProjection(Projections.property("addAlias.city")); 
+0

Essayez-le. Qu'en est-il de la projection de collections ??? – KCore

+0

qui devrait fonctionner de la même façon (pour être sûr qu'il est supporté, regardez le manuel de référence d'hibernation pour votre version d'hibernation). Attention, il y a dans votre exemple le même problème 'case': utilisez 'address' pour la propriété Projections.property, pas 'Address'. – Thierry

Questions connexes