2011-02-09 7 views

Répondre

0

AFAIK il est impossible. Vous devriez avoir ouvert la session d'hibernation pour faire ceci. Dans mon projet, je fais ce que vous avez besoin de cette façon:

Je service au printemps comme celui-ci:

public interface SomeObjectManager { 
    List<SomeObject> getObjects();  // here we have lazy loading for SomeObject's properties 
    SomeObject getFullObject(long objectId); // here we're loading full object 
} 

Certaines propriétés de SomeObject utilisent le chargement paresseux. Pour les charger j'utilise requête HQL comme ceci:

SELECT s FROM SomeObject s 
    LEFT JOIN FETCH s.child children 
     LEFT JOIN FETCH children.items items 
     LEFT JOIN FETCH items.property 
WHERE s.id=:id 

Cette mise en veille prolongée des forces de requête pour charger les propriétés définies paresseux. Par conséquent, si vous n'avez pas besoin d'instances SomeObject complètement chargées, utilisez la méthode getObjects(). Si vous avez besoin de détails sur une occurrence concrète de SomeObject, utilisez la méthode getFullObject().

Espérons que cela aide.

2

GraniteDS, ainsi que son cadre de gestion de données, vous permet de charger de manière transparente vos associations non initiés: voir la documentation here. Donc, fondamentalement, vous n'avez rien de spécial à faire pour initialiser vos collections/proxies paresseuses, vous n'avez besoin d'en accéder que d'un côté client (en demandant la taille d'une collection par exemple) et cela déclenchera un appel au serveur et récupérer les données non initialisées. Si vous ne voulez pas ou ne pouvez pas utiliser le chargement paresseux transparent, vous devez écrire une méthode d'initialisation spécifique qui doit avoir accès à un EntityManager, recevoir votre entité en tant que paramètre, initialiser l'association requise et envoyer le entité de retour au client.