/ / JPA + Hibernate force JPA à ne pas utiliser les procurations sur le chargement paresseux

JPA + Hibernate oblige JPA à ne pas utiliser les procurations sur le chargement paresseux - java, hibernate, jpa, proxy, chargement paresseux

Nous utilisons JPA + Hibernate. J'ai des mappages plusieurs-à-un qui sont chargés paresseux.

En service, j'initialise les objets plusieurs-à-un en appelant leur méthode getter. mais le proxy est assigné au VO parent et non à l'objet VO réel.

Ma question est la suivante: Y at-il un moyen dans l'APP de forcer l'utilisation d'une stratégie de substitution? Ma limite ici est que je ne peux pas utiliser d'objets Hibernate ou des annotations comme @LazytoOne etc.

Merci d'avance.

Réponses:

2 pour la réponse № 1

Vous ne pouvez pas empêcher Hibernate d’utiliser des objets proxy là-bas car il doit garantir qu’il s’agit d’une relation paresseuse.

Vous avez plusieurs choix:

  1. Déclencher l'initialisation Hibernate.initialize(parent.getChild()). Notez que ce n'est pas la meilleure façon de le faire et que cela nécessite également une transaction active.
  2. Récupère la relation lors de la récupération de l'entité elle-même. Cela peut être fait avec les jointures Fetch. Les API JPQL / HQL / Criteria sont capables de le faire.
  3. Utilisez des projections en lecture seule contenant uniquement les données dont vous avez besoin. Pour ce cas particulier, vous pouvez utiliser Spring Data JPA comme il est livré avec une telle fonctionnalité.

Je vous suggère d’opter pour l’option 2 ou 3, car ce sont les moyens les plus efficaces de le faire.

Furher lit à propos du chargement paresseux ici.