Hibernate學習筆記之Lazy策略
Hibernate Lazy采用CGLIB,可以對類進行代理,用在:
Class: 可以取值true,false,默認true
Property: 可以取值true,false,需要類增強工具
集合:true/false/extra
one-to-one,many-to-one:取false,proxy/noproxy
Hibernate lazy概念:只有真正使用該對象時,才會創建,對于Hibernate來說,只有真正使用時才會發出sql。
測試類Hibernate Lazy:查id不發sql,因為你傳的就是主鍵,查別的屬性會發sql,Hibernate Lazy有效期必須是session在open時才可以,解決方式是使用openSessionInview。
測試集合Hibernate Lazy:get集合時不會發sql,迭代會發sql,查個數的時候會把整個集合查出來,這樣的話對效率有影響。
把class的lazy設置成false時,再load類時會把普通屬性都查出來,但是集合不查。
class標簽上的lazy不會影響到集合上的lazy特性。
class標簽上的lazy特性只對普通屬性起作用。
lazy在集合上用extra在獲取size的時候會發出count語句,這樣對效率有提升。
在單端關聯上lazy默認,和集合一樣,在get時返回代理不發查詢語句,在使用時發出sql。
在單端關聯上lazy=false,在訪問普通屬性時發出兩條sql,查詢屬性以及對應的關聯對象。
將class標簽上lazy設置成false,其它默認:不會影響單端關聯,也不會影響集合。
【編輯推薦】