我有以下實體結構:業務 - >廣告系列 - >促銷,其中ONE業務可以有許多廣告系列,一個廣告系列可以有許多促銷活動。一對多關係都被聲明爲LAZY。在我的代碼的一個地方,我需要預先抓取從商務兼具收藏,所以我做的:JPA:請幫助理解「加入獲取」
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);
但是,查詢返回包含在它4個業務對象,所有4個對象指的是一個結果列表相同的業務實例。在我的數據庫中,該業務下有3個廣告系列,所有3個廣告系列都有3個廣告系列。
我有兩個問題:
起初,我用清單包含關係的許多方面,但是當程序運行時,我得到「org.hibernate.HibernateException:不能同時獲取多袋「例外。然後我GOOGLE了這個異常,它看起來像我必須使用Set,而不是List。所以我把集合改爲Set,它工作。有人能告訴我爲什麼List在這種情況下不起作用嗎?
我期待查詢返回單個結果,因爲它查詢的是主鍵的id,因此應該只返回單個結果。但事實證明,它返回列表中的4個實例。這是一個問題嗎?或者這是預期的行爲?
任何幫助將不勝感激。
向查詢中添加「distinct」確實有效。謝謝。 – 2009-02-27 02:12:14