hibernate中fetch lazy

join 查詢的時候,是用一條語句查處全部記錄,包括關聯表記錄,sql

select查出的是N+1條記錄,兩個都是差很少的,可是若是用了lazy=true,延遲加 載的話,select在查詢時只會查出主表記錄,也就是1,若是其餘地方也用到了數據,此時就會自動在執行查詢,查出N,能夠下降內存消耗 .還有,hibernate是的session是輕量級的,建立和銷燬都不花不少資源,查詢數據也很快,這裏fetch主要起這個做用,因此咱們通常的情 況下要用select查詢session

 

 

fetch="join",已經指明瞭使用外鏈接查詢,那麼lazy的值就沒什麼用了,2端的數據都會查詢出來,延遲不起做用

給你舉一下fetch和lazy結合使用的狀況。
一、當lazy="true" fetch = "select" 的時候 , 這個時候是使用了延遲策略,開始只查詢出一端實體,多端的不會查詢,只有當用到的時候纔會發出sql語句去查詢 ;

二、當lazy="false" fetch = "select" 的時候 , 這個時候是使沒有用延遲策略,同時查詢出一端和多端,同時產生1+n條sql.

三、當lazy="true"/lazy="false" fetch = "join"的時候,這個時候延遲已經沒有什麼用了,由於採用的是外鏈接查詢,同時把一端和多端都查詢出來了,延遲沒有起做用。
相關文章
相關標籤/搜索