JPA: s'il vous plaît aider à la compréhension “join fetch”

J'ai l'entité suivante de la structure: Entreprise --> Campagne --> la Promotion, où UNE Entreprise peut avoir de NOMBREUSES Campagnes et UNE Campagne peut avoir de NOMBREUSES Promotions. À la fois un-à-plusieurs relations sont déclarées comme des PARESSEUX. Une place à part dans mon code, j'ai besoin de ardemment récupérer à la fois les collections d'une Entreprise, donc je n':

    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);

Toutefois, la requête renvoie une liste qui contient 4 objets d'Affaires, tous les 4 objets font référence à la même Entreprise de l'instance. Dans ma base de données, cette entreprise possède 3 campagnes, et tous les 3 campagnes ont 3 promotions en vertu de l'.

J'ai deux questions:

  1. Au premier abord, j'utilise de la Liste contient de nombreux côtés de la les relations, mais lorsque le programme s'exécute, j'obtiens un "org.mise en veille prolongée.HibernateException: ne peut pas simultanément extraire plusieurs sacs de" l'exception". Alors j'ai googlé cette exception et il semble que je dois utiliser Ensemble, au lieu de la Liste. J'ai donc changé la collection de Jeu et cela a fonctionné. Quelqu'un peut-il me dire pourquoi la Liste ne fonctionne pas dans cette situation?
  2. Je m'attends à ce que la requête renvoie un résultat unique, parce que c'est d'interroger l'identité, qui est la clé primaire, et donc ne doit retourner qu'un seul résultat. Mais il s'avère qu'il renvoie 4 cas dans une Liste. Est-ce un problème? Ou est-ce un comportement normal?

Toute aide sera grandement appréciée.

OriginalL'auteur Tong Wang | 2009-02-26