FetchType与FetchMode的区别
使用例:
@OneToMany(mappedBy="item",cascade=CascadeType.ALL,fetch=FetchType.EAGER)?
@Fetch(value=FetchMode.SUBSELECT)?
兩者比較:
兩者都是設(shè)定關(guān)聯(lián)對象的加載策略。前者是JPA標(biāo)準(zhǔn)的通用加載策略注解屬性,
后者是Hibernate自有加載策略注解屬性。
FetchType可選值意義與區(qū)別如下:
FetchType.LAZY:?懶加載,在訪問關(guān)聯(lián)對象的時(shí)候加載(即從數(shù)據(jù)庫讀入內(nèi)存)
FetchType.EAGER:立刻加載,在查詢主對象的時(shí)候同時(shí)加載關(guān)聯(lián)對象。
FetchMode可選值意義與區(qū)別如下:
@Fetch(FetchMode.JOIN):?始終立刻加載,使用外連(outer?join)查詢的同時(shí)加載關(guān)聯(lián)對象,忽略FetchType.LAZY設(shè)定。
@Fetch(FetchMode.SELECT)?:默認(rèn)懶加載(除非設(shè)定關(guān)聯(lián)屬性lazy=false),當(dāng)訪問每一個關(guān)聯(lián)對象時(shí)加載該對象,會累計(jì)產(chǎn)生N+1條sql語句
@Fetch(FetchMode.SUBSELECT)??默認(rèn)懶加載(除非設(shè)定關(guān)聯(lián)屬性lazy=false),在訪問第一個關(guān)聯(lián)對象時(shí)加載所有的關(guān)聯(lián)對象。會累計(jì)產(chǎn)生兩條sql語句。且FetchType設(shè)定有效。
轉(zhuǎn)載于:https://www.cnblogs.com/toSeeMyDream/p/4354386.html
總結(jié)
以上是生活随笔為你收集整理的FetchType与FetchMode的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring AOP (事务管理)
- 下一篇: [译]git revert