J'ai la structure d'entité suivante: Business -> Campaign -> Promotion, où ONE Business peut avoir BEAUCOUP de campagnes et ONE Campaign peut avoir BEAUCOUP de promotions. Les deux relations un-à-plusieurs sont déclarées comme LAZY. Un endroit dans mon code, je dois aller chercher avec impatience les collections d'une entreprise, donc je fais:JPA: aidez-nous à comprendre "join fetch"
Query query = entityManager.createQuery("select b from Business b " +
"left join fetch b.campaigns c " +
"left join fetch c.promotions where b.id=:id");
query.setParameter("id", b.getId());
business = (Business) query.getResultList().get(0);
Cependant, la requête renvoie une liste de résultats qui contient 4 objets métier en elle, tous les 4 objets font référence à la même instance Business. Dans ma base de données, cette entreprise compte trois campagnes et toutes les trois campagnes ont trois promotions.
J'ai deux questions:
Au début, j'utiliser la liste pour contient les multiples facettes des relations, mais lorsque le programme court, je reçois « org.hibernate.HibernateException: ne peut pas chercher simultanément plusieurs sacs "exception. Ensuite, j'ai googlé cette exception et il semble que je doive utiliser Set, au lieu de List. J'ai donc changé la collection pour Set et cela a fonctionné. Quelqu'un peut-il me dire pourquoi la liste ne fonctionnera pas dans cette situation?
Je m'attends à ce que la requête renvoie un résultat unique, car elle interroge l'ID, qui est la clé primaire et ne devrait donc renvoyer qu'un seul résultat. Mais il s'avère qu'il renvoie 4 instances dans une liste. Est-ce un problème? Ou est ce comportement attendu?
Toute aide sera grandement appréciée.
L'ajout de "distinct" à la requête a fait l'affaire. Merci. –