Comment puis-je accéder à chargement paresseux champs après la session est fermée, l'utilisation d'hibernate?
envisager ce scénario:
- J'ai chargé une entité Mère par le biais de hibernate
- Parent contient une collection d'Enfants qui est gros et paresseux chargé
- La session hibernate est fermée après cette première charge pendant que l'utilisateur visualise les données Parent
- L'utilisateur peut choisir d'afficher le contenu de la paresse collection d'Enfants
- Je souhaite maintenant de charger cette collection
Quels sont les moyens /le meilleur moyen de chargement de cette collection?
- Assumer session-à-vue n'est pas une option, car l'extraction de la collection d'Enfants ne se produisent après que l'utilisateur a consulté les Parents et a décidé de vue des Enfants.
- C'est un service qui va être accessible à distance par le web et de bureau basé client.
Grâce.
OriginalL'auteur Paul Adamson | 2009-07-01
Vous devez vous connecter pour publier un commentaire.
Je suis en train de faire quelques hypothèses sur ce que l'utilisateur est en train de regarder, mais il semble que vous ne souhaitez récupérer les enfants si l'utilisateur a déjà vu la mère et veut vraiment voir les enfants.
Pourquoi ne pas essayer d'ouvrir une nouvelle session et de récupération des enfants par leurs parents? Quelque chose le long des lignes de ...
Que faire si la mère de champ est une collection?
OriginalL'auteur zmf
La collection lazy peut être chargé par l'utilisation d'Hibernate.initialiser(parent.getCollection (), sauf que l'objet parent doit être relié à une session active.
Cette solution prend l'Entité mère et le nom du chargement paresseux champ et les rendements de l'Entité avec la collection entièrement chargé.
Malheureusement, comme le parent doit être rattachée à la nouvelle ouverture de session, je ne peux pas utiliser une référence à la collection en différé ce qui permettrait de référence de la détacher de la version de l'Entité; d'où le nom du champ et de la réflexion. Pour la même raison, ce doit retourner le joint Entité mère.
Donc dans l'OP scénario, cet appel peut être fait lorsque l'utilisateur choisit d'afficher les paresseux collection:
La Méthode:
OriginalL'auteur Paul Adamson
Hibernate gère des collections d'une manière différente que la normale des champs.
À mon travail, nous contourner ce problème en juste initialiser les champs de la charge initiale que nous avons besoin sur une base de cas par cas. Par exemple, dans une façade de la méthode de chargement qui est entouré par une transaction que vous pourriez avoir:
et nous avons un autre façade à appeler pour chaque intention. Essentiellement, cela signifie que procure ce que vous avez besoin, car vous seriez le chargement de ces domaines spécifiques lorsque vous avez besoin de quelque manière et cela les met dans la session au moment du chargement.
OriginalL'auteur bwobbones