2013-03-06 40 views
0

我是JPA的新手,並使用Hibernate和Spring創建示例應用程序。從各個崗位和谷歌,我發現實現LAZY獲取的方法很少。實現@OneToMany的首選方式懶惰的讀取兒童

  • 一個最討論的方法似乎open session in view pattern,雖然許多人提出了這種方法的各種缺點。
  • 另一種方法是使用Join Query(例如,select p from Partner p join fetch p.contacts where...)。

請說明我可以選擇的首選實施方式。 謝謝。

回答

2

好方法是第二種方法。

在視圖模式中打開會話是一種反模式練習。它提供了在JSP/Servlet級別更改實體的機會。這對數據並不安全,是一種糟糕的編程習慣。

的perfered方法是使用它之前手動加載的實體的懶惰地加載場或使用在HQL語句保留字。您將在視圖層中使用哪些/哪些數據是您自己應該事先知道的事情,因此在使用前準備/加載數據的責任屬於您自己,這是常識。

這裏是提前加載懶洋洋地加載領域的一些方法:查詢

Criteria.setFetchMode(字符串associationPath,FetchMode模式)時

  1. 集讀取模式來獲得字段值熱切;

  2. Hibernate.initialize()初始化代理字段的方法。

  3. add fetch在HQL語句中。從員工

    選擇EMP爲EMP取上emp.dept加入成爲地方部門像「HR」

+0

dept.name謝謝你的答案。 – Mamun 2013-03-06 22:45:54