title: JPA: please help understanding "join fetch"
body: <p>I have the following entity structure: Business --> Campaign --> Promotion, where ONE Business can have MANY Campaigns and ONE Campaign can have MANY Promotions. Both one-to-many relations are declared as LAZY. One place in my code, I need to eagerly fetch both collections from a Business, so I do:</p>
  
  <pre><code>    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);
  </code></pre>
  
  <p>However, the query returns a result list that contains 4 Business objects in it, all 4 objects are referring to the same Business instance. In my database, this business has 3 campaigns under it, and all the 3 campaigns have 3 promotions under them.</p>
  
  <p>I have two questions:</p>
  
  <ol>
  <li><p>At first, I use List to contains the many sides of the relations, but when program runs, I get "org.hibernate.HibernateException: cannot simultaneously fetch multiple bags" exception. Then I googled this exception and it looks like I have to use Set, instead of List. So I changed the collection to Set and it worked. Can someone tell me why List won't work in this situation?</p></li>
  <li><p>I am expecting the query to return a single result, because it's querying against the id, which is the primary key and thus should only return a single result. But it turns out that it returns 4 instances in a List. Is this a problem? Or is this expected behavior? </p></li>
  </ol>
  
  <p>Any help will be greatly appreciated.</p>