2012-06-16 41 views
0

一個兒童在使用,爲什麼休眠加載父實體:Hibernate的4發現在FetchType.Eager映射

在父子關係,其中有一個FetchType.Eager映射,我注意到,Hibernate會加載父實體任何時間和EntityManager.find都是在一個孩子身上執行的。這似乎有點浪費。父級的「幕後」加載會導致持久化上下文中出現額外的SELECT和額外對象。另外,它forces the app to address the parent-child association when removing a child

爲什麼Hibernate的行爲是這樣的?這是由JPA規範強制嗎?

回答

0

它來自與渴望持久屬性抓取策略規範時,實體加載必須獲取:

的實體被認爲是加載如果所有 FetchType.EAGER - 無論是顯式地指定或屬性默認情況下(包括 關係和其他集合值屬性)已從數據庫加載 或由應用程序分配。包含 的屬性FetchType.LAZY可能已經加載,也可能未加載。