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