有沒有一種很好的方法來確定爲什麼Hibernate/JPA執行查詢。我有兩個實體鏈接Hibernate JPA:爲什麼執行SQL?
@OneToOne(cascade = {CascadeType.REMOVE, CascadeType.PERSIST},
fetch = FetchType.LAZY)
當提取一個實體時,另一個也被查詢。我試圖找出如何避免(實際的懶加載)。
感謝,
丹尼斯
有沒有一種很好的方法來確定爲什麼Hibernate/JPA執行查詢。我有兩個實體鏈接Hibernate JPA:爲什麼執行SQL?
@OneToOne(cascade = {CascadeType.REMOVE, CascadeType.PERSIST},
fetch = FetchType.LAZY)
當提取一個實體時,另一個也被查詢。我試圖找出如何避免(實際的懶加載)。
感謝,
丹尼斯
首先,FetchType.LAZY
是持久性提供一個提示,不要求供應商遵循它。
也許在這種情況下,提供者必須檢查關係是否爲null
(否則提供者可以創建一個代理對象,以實現對實體的懶惰訪問)。
你可以嘗試以下方法:
null
,將其標記爲optional = false
Enum FetchType
定義了從數據庫中獲取數據的策略。 EAGER策略是持久性提供程序運行時的一項要求,即必須急切地提取數據。 LAZY策略是持久性提供程序運行時的一個暗示,即數據應該在第一次訪問時被延遲取出。 允許實現熱切地獲取已爲其指定了LAZY策略提示的數據。
你怎麼知道另一個被查詢?可以在這裏複製你的查詢? – 2011-01-11 12:22:02