2011-01-11 38 views
0

有沒有一種很好的方法來確定爲什麼Hibernate/JPA執行查詢。我有兩個實體鏈接Hibernate JPA:爲什麼執行SQL?

@OneToOne(cascade = {CascadeType.REMOVE, CascadeType.PERSIST}, 
      fetch = FetchType.LAZY) 

當提取一個實體時,另一個也被查詢。我試圖找出如何避免(實際的懶加載)。

感謝,

丹尼斯

+0

你怎麼知道另一個被查詢?可以在這裏複製你的查詢? – 2011-01-11 12:22:02

回答

0

首先,FetchType.LAZY是持久性提供一個提示,不要求供應商遵循它。

也許在這種情況下,提供者必須檢查關係是否爲null(否則提供者可以創建一個代理對象,以實現對實體的懶惰訪問)。

你可以嘗試以下方法:

  • 如果這個關係是永遠null,將其標記爲optional = false
  • 如果使用字段訪問(即標註放置在現場)時,儘量使用屬性訪問
0

Enum FetchType定義了從數據庫中獲取數據的策略。 EAGER策略是持久性提供程序運行時的一項要求,即必須急切地提取數據。 LAZY策略是持久性提供程序運行時的一個暗示,即數據應該在第一次訪問時被延遲取出。 允許實現熱切地獲取已爲其指定了LAZY策略提示的數據

Enum FetchType

相關問題