2014-01-09 76 views
3

hibernate documentation執行查詢重複說:什麼是由Hibernate查詢返回集合

查詢是使用集合通常返回根對象 重複預先抓取的,但他們的收藏 初始化。您可以通過Set過濾這些重複項。

例如,如果我有一個Order類與具有在它們之間one-to-many映射OrderLines的列表。那麼如果我使用Hibernate查詢,在這種情況下我的Order類稱爲根對象?那麼爲什麼Hibernate要加載重複元素呢?

請幫助我理解這一點,我是Hibernate的新手,所以很難理解這個概念。

回答

4

根實體是由所述查詢選擇的實體:

select o from Order o ... 

在這種情況下,oOrder類型的根。

現在,如果你這樣做

select o from Order o left join fetch o.lines 

,你有2個訂單,每個有3條線路,在數據庫中,那麼潛在的SQL查詢將返回6行,Hibernate也將返回6個階對象的列表。但是列表將包含第一次3次,第二次3次。

您可以通過使用Set<Order> deduplicated = new HashSet<Order>(listOfOrders)

  • 添加distinct關鍵字查詢

    • 避免這種情況:

      select distinct o from Order o left join fetch o.lines 
      
  • +0

    感謝快速反應很多JB :) – Chaitanya