2009-07-07 8 views
1

Je dois sérialiser le résultat d'une requête jpql (ce qui signifie que je dois sérialiser tous les beans jpa). Je veux obtenir toutes les relations imbriquées (même si elles sont chargées paresseusement) afin que le client puisse désérialiser à l'autre extrémité sans avoir d'erreur. Y-a-t-il un moyen de faire ça?Comment puis-je sérialiser un bean jpa qui obtiendra également la relation de chargement paresseux?

+0

Voulez-vous sérialiser uniquement le bean lui-même sans tous ses 'voisins' paresseux? Alors, comment le client les désérialiserait-il? –

+0

Non, je veux en fait avoir tous ses "voisins" paresseux. Donc le fait est que je veux obtenir tous les voisins, peu importe qu'ils soient paresseux ou connectés ou non. Je veux être en mesure d'appeler une méthode et de charger automatiquement tous les voisins connectés même s'ils sont connectés paresseux. –

Répondre

0

Je pense que vos options sont soit:

  1. Utiliser le chargement Désireuse avant la sérialisation.
  2. Demandez au client de fusionner le bean désérialisé dans un EntityManager, puis de lire les chargeurs paresseux si nécessaire.
+0

Pour # 1, Pouvez-vous forcer le chargement hâtif sur faire la requête: List results = em.createQuery (query) .getResultList(); ? Comment puis-je forcer tous les beans dans le résultat à être impatient de charger même si les beans n'ont pas spécifié ces relations comme (fetch = FetchType.EAGER)? –

+0

Vous pouvez modifier les annotations pour être désireux d'utiliser la réflexion avant de faire la requête pour les moments où vous voulez sérialiser - laissez paresseux le reste du temps. Ou bien: après avoir fait la requête, lisez chaque collection de référence paresseuse pour forcer la lecture. Je ne pense pas qu'il soit possible de forcer la charge impatiente de la requête, vous devez modifier l'entité. Semble étrange que vous voulez sérialiser, mais utilisez le chargement paresseux - avez-vous des moments où vous voulez paresseux et les moments où impatient? Peut-être que la réflexion fonctionnerait pour vous? –

+0

Le problème avec la déclaration de toute la charge ardente de la relation est que vous pouvez rencontrer des problèmes de dépassement de la taille maxium de rowsize car le chargement hâtif générera une seule jointure complexe. Donc, si vous avez beaucoup de beans et beaucoup de relations imbriquées, vous pouvez atteindre une erreur de limite maxium rowsize. C'est pourquoi la relation est par défaut paresseuse dans de nombreux cas. –

Questions connexes