国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JSP > 正文

總結(jié)Hibernate經(jīng)驗(yàn)

2024-09-05 00:17:15
字體:
供稿:網(wǎng)友
0、雙向關(guān)聯(lián)中最好是設(shè)置一端inverse=true,一端inverse=false。一般inverse=false會放在多的一端,即由多的一方來維護(hù)關(guān)系,并在多的一方設(shè)置cascade="save-update",在單的一方設(shè)置cascade="all" 。 
1、使用Hibernate的id generator來生成無業(yè)務(wù)意義的主鍵,不使用有業(yè)務(wù)含義的字段做主鍵,不使用assigned。  
2、使用對象類型(String/Integer/Long/...)來做主鍵,而不使用基礎(chǔ)類型(int/long/...)做主鍵。  
3、在用Integer做主鍵時,需設(shè)置unsaved-value="0" 而不是null或none,因?yàn)樵诔绦蛑兴荒J(rèn)設(shè)置成了0. 
4、不使用composite-id來處理復(fù)合主鍵的情況,而使用UserType來處理該種情況。 Gavin King并不提倡使用composite-id,如果你不是基于已有的數(shù)據(jù)庫編程,而是重新設(shè)計(jì)數(shù)據(jù)庫結(jié)構(gòu),那么建議使用UserType。你可以自定義一個UserType,包括User和Goods,并且在hbm中定義該UserType為unique的,同樣可以達(dá)到目的。而這種方式的好處則是不需要你來手工維護(hù)id,而由Hibernate自動維護(hù)。UserType的使用方法參考手冊5.2.4節(jié)和Hibernate自帶的示例中的net.sf.hibernate.test.DoubleStringType。 
5、在使用HQL的地方,結(jié)果一般不會受XML中設(shè)置的影響。 
6、fetch參數(shù)為select方式時先查詢返回要查詢的主體對象(列表),再根據(jù)關(guān)聯(lián)外鍵id,每一個對象發(fā)一個select查詢,獲取關(guān)聯(lián)的對象,形成n+1次查詢; 
而join方式,主體對象和關(guān)聯(lián)對象用一句外鍵關(guān)聯(lián)的sql同時查詢出來,不會形成多次查詢。 
如果你的關(guān)聯(lián)對象是延遲加載的,它當(dāng)然不會去查詢關(guān)聯(lián)對象。 
另外,在hql查詢中配置文件中設(shè)置的join方式是不起作用的 
7、使用full join fetch 與 right join fetch是沒有意義的。 
8、添加數(shù)據(jù)、刪除、更新操作時,將同時更新二級緩存。這就是Hibernate做批處理的時候效率不高的原因,原來是要維護(hù)二級緩存消耗大量時間的緣故 
9、unsaved-value 屬性在Hibernate3中幾乎不再需要。 
10、單向關(guān)聯(lián)更加難于查詢。在大型應(yīng)用中,幾乎所有的關(guān)聯(lián)必須在查詢中可以雙向?qū)Ш健?nbsp;
11、在兩層結(jié)構(gòu)中,把Hibernate Session從JDBC連接中脫離開,下次需要用的時候再連接上。絕不要把一個Session用在多個應(yīng)用程序事務(wù)(Application Transaction)中,否則你的數(shù)據(jù)可能會過期失效。 
12、在系統(tǒng)中對性能要求很嚴(yán)格的一些部分,某些操作也許直接使用JDBC會更好。但是請先確認(rèn)這的確是一個瓶頸,并且不要想當(dāng)然認(rèn)為JDBC一定會更快。如果確實(shí)需要直接使用JDBC,那么最好打開一個 Hibernate Session 然后從 Session獲得connection,按照這種辦法你仍然可以使用同樣的transaction策略和底層的connection provider。 
13、當(dāng)異常發(fā)生的時候,必須要回滾 Transaction ,關(guān)閉Session。 
14、多對多連接用得好的例子實(shí)際上相當(dāng)少見。大多數(shù)時候你在“連接表”中需要保存額外的信息。這種情況下,用兩個指向中介類的一對多的連接比較好。 
15、絕大多數(shù)的查詢并不能從查詢緩存中受益,所以Hibernate默認(rèn)是不進(jìn)行查詢緩存的。如若需要進(jìn)行緩存,請調(diào)用 Query.setCacheable(true)方法。這個調(diào)用會讓查詢在執(zhí)行過程中時先從緩存中查找結(jié)果, 并將自己的結(jié)果集放到緩存中去。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄冈市| 武山县| 于都县| 邢台县| 伊川县| 云南省| 凤凰县| 平南县| 论坛| 敦化市| 哈尔滨市| 巩留县| 三穗县| 辉南县| 金平| 麟游县| 宣汉县| 洪雅县| 杨浦区| 宁强县| 桦甸市| 榆中县| 嫩江县| 延川县| 屯留县| 大荔县| 吐鲁番市| 怀宁县| 大埔县| 水富县| 镇原县| 易门县| 出国| 辰溪县| 洛阳市| 蒙自县| 景谷| 同江市| 全椒县| 闸北区| 兴城市|