Hibernate中1+N問題以及解決方法

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

1. Hibernate中的1+N問題描述 ??

??????? 在多對一關系中,當我們需要查詢多的一方對應的表的記錄時,可以用一條sql語句就能完成操作。然而,在多的一方的實體類中的@ManyToOne標注的fetch的默認值是fetchType.EAGER,這時,hibernate除了發出查詢多的一方對應的表的記錄的sql語句外,還會發出n(多方記錄數)條sql語句,這就是1+n問題。如:bbs的板塊(Category),主題(topic),回復(msg)。一個板塊有多個主題,而一個主題屬于一個板塊,則Category和topic屬于一對多的關系,在topic里設置@ManyToOne。當需要取出所有的主題時,只需要發出select * from topic一條語句就能做到。然而,hibernate會查詢出每個topic所對應的Category,所以會發出1+n條sql語句。

?

2. 1+N問題的解決辦法

?

????①設置@ManyToOne的fetch屬性值為fetchType.LAZY,這種方式解決后,后面的n條sql語句按需而發。但是有個弊端,就是如果需要級聯查詢就無法獲取級聯對象了。

????②設置@BatchSize(size=5)(該注解要加在類上面,跟@Entity在同一位置),這樣發出的sql語句減少。這個設置在一定程度上提高了效率。

????③在hqp語句中使用用join fetch,事實上Criteria用的就是這種方法。這也是最常用的方法;

@Test   
//join fetch  
publicvoid test1_N3(){  Session session=sf.getCurrentSession();  session.beginTransaction();  //List<Topic> topics=(List<Topic>)session.createCriteria(Topic.class).list();//只有一條查詢語句,Criteria方法就是這種方式  List<Topic> topics=(List<Topic>)session.createQuery("from Topic t left join fetch t.category c").list();  for (Topic t:topics) {  System.out.println(t.getId()+"----"+t.getTitle());  System.out.println(t.getCategory().getName());  }  session.getTransaction().commit();  
}  

這就是Hibernate中的1+N問題,如有錯誤之處,歡迎留言指正~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450178.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450178.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450178.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android應用開發—通用的GridView網格分割線

注&#xff1a;本文基于 Android RecyclerView 使用完全解析 體驗藝術般的控件 中關于GridView網格分割線部分代碼擴展而來。 原接口代碼&#xff1a; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import andro…

hdfs部署

一、下載Hadoop 2.6.0-cdh5.7.0的tar.gz包并解壓&#xff1a; wget http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.7.0.tar.gz tar -zxvf hadoop-2.6.0-cdh5.7.0.tar.gz cd /usr/local/hadoop-2.6.0-cdh5.7.0/ ls bin bin-mapreduce1 cloudera etc examples …

JVM技術周報第2期

JVM技術周報第2期 JVM技術周報分享JVM技術交流群的討論內容&#xff0c;由群內成員整理歸納而成。如果你有興趣入群討論&#xff0c;請關注「Java技術精選」公眾號&#xff0c;通過右下角菜單「入群交流」加我好友&#xff0c;獲取入群詳情。 1、如何閱讀源碼&#xff1f; 在我…

最長重復子串和最長不重復子串求解

最長重復子串和最長不重復子串求解 本文內容框架&#xff1a; 1 最長重復子串 基本方法、KMP算法求解、后綴數組求解 2 最長不重復子串 基本方法、動態規劃、動態規劃Hash 3 小結 1最長重復子串 1.1問題描述 首先這是一個單字符串問題。子字符串R 在字符串L 中至少出現兩…

sql 查詢結果為null替換 為 0

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 mysql : ifnull( xxx , 0 ) select ifnull(colname,0) from tablename oracle: NVL&#xff08;xxx , 0 )

前后端分離——token超時刷新策略

前言 記錄一下前后端分離下————token超時刷新策略&#xff01; 需求場景 昨天發了一篇記錄 前后端分離應用——用戶信息傳遞 中介紹了token認證機制&#xff0c;跟幾位群友討論了下&#xff0c;有些同學有這么一個疑惑&#xff1a;token失效了&#xff0c;應該怎么做&…

Android ImageView的scaleType(圖片比例類型)屬性與adjustViewBounds(調整視圖邊界)屬性

本文轉載自[Android ImageView的scaleType&#xff08;圖片比例類型&#xff09;屬性與adjustViewBounds&#xff08;調整視圖邊界&#xff09;屬性]并做了排版的修改(http://www.cnblogs.com/xzbc/p/5098347.html) Android ImageView的scaleType的屬性可設置為matrix&#xff…

阿里云@廣東:讓我們一起上云!

鍋爐故障預測 預警準確率95%以上 利用算法模型進行制程能力的 綜合分析與評估優化 提升定標效率 時間降低30% 構建垃圾焚燒發電工藝的優化算法模型 綜合考慮環保和設備負荷因素 推薦最優工藝參數組合 優化人工操作&#xff0c;提高燃燒效率 中海油能源發展公司 石油鉆探預測優化…

程序員的自我經營

程序員的自我經營之道第一層 從你決定邁出校門進入社會的那一刻起&#xff0c;你就進入了一個戰場&#xff0c;這個戰場雖然沒有硝煙彌漫&#xff0c;沒有炮火紛飛&#xff0c;但卻絕不亞于任何一個真正的戰場。你要在這個戰場上去搏殺&#xff0c;去競爭&#xff0c;利用各種…

P3966 [TJOI2013]單詞

\(\color{#0066ff}{ 題目描述 }\) 小張最近在忙畢設,所以一直在讀論文。一篇論文是由許多單詞組成但小張發現一個單詞會在論文中出現很多次,他想知道每個單詞分別在論文中出現了多少次。 \(\color{#0066ff}{輸入格式}\) 第一行一個整數N,表示有N個單詞。接下來N行每行一個單詞,…

Android應用開發—RecyclerView繪制蒙層

背景&#xff1a;如何在跨越兩個或兩個以上的item繪制一個view&#xff0c;該view需要跟隨recyclerView的滑動而整體移動。 Overridepublic void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {super.onDrawOver(c, parent, state);final View child …

排序_3

希爾排序:分組排序 是把記錄按下標的一定增量分組&#xff0c;對每組使用直接插入排序算法排序&#xff1b; 隨著增量逐漸減少&#xff0c;每組包含的關鍵詞越來越多&#xff0c;當增量減至1時&#xff0c;整個文件恰被分成一組&#xff0c;算法便終止。 def shell_sort(array)…

face++算法工程實習生面試

2018-01-11 算法工程實習生 自動化工具鏈方面 面試的知識點非常仔細&#xff0c;十分檢驗基本功底 1.自我介紹 2.算法題&#xff0c;leetcode 第一題 兩數之和 問python中數組和字典的查找時間復雜度 3.git git 4.linux 常用命令 cd - ,cd ,cd ~,cd / awk 讀取倒數第一行&a…

IDEA中怎么設置黑色或白色背景?

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 開啟軟件Intellij IDEA&#xff0c;在編輯框上面找到最前端的File。 點擊File&#xff0c;找到Setting&#xff0c;點擊進入。 然后在…

大公司體制內創新的困境

周末在家&#xff0c;隨手翻看了一點吳軍老師的《浪潮之巔》這本書。去年這本書上市之后我從頭到尾閱讀了一遍&#xff0c;在《浪潮之巔》中吳軍老師歷數了IT行業公司的興衰發展史&#xff0c;提出了一個令人印象深刻的“基因決定論”&#xff0c;即由于公司基因的影響&#xf…

java打印調用堆棧的方式

Log.d(TAG,Log.getStackTraceString(new Throwable()));

weblogic jprofile配置

前提&#xff1a; 1.安裝好weblogic 2.安裝好jprofile 非等待模式&#xff1a; export JAVA_OPTIONS"${JAVA_OPTIONS} -Dweblogic.threadpool.MinPoolSize100 -Dweblogic.threadpool.MaxPoolSize1000 -Djava.awt.headlesstrue -agentpath:/opt/jprofiler9/bin/linux-x64/l…

springboot/git學習資源記錄

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 只是記錄一下覺得不錯的資源&#xff1a; springboot: http://bbs.itmayiedu.com/article/1508826968799 http://blog.720ui.com/tags…

音視頻引擎研究

音視頻包&#xff1a;http://ishare.iask.sina.com.cn/f/33851582.html 1、WebRTC目的 WebRTC&#xff08;Web Real-Time Communication&#xff09;項目的最終目的主要是讓Web開發者能夠基于瀏覽器&#xff08;Chrome\FireFox\...&#xff09;輕易快捷開發出豐富的實時多媒體應…

我為什么“放棄”從事八年的嵌入式領域

由于嵌入式平臺性能所限&#xff0c;以及相應的開發平臺&#xff0c;工具&#xff0c;語言所限&#xff0c;導致很多前沿領域的軟件工程理論&#xff0c;方法無法實施&#xff0c;有些跟不上時代的感覺。 ……