日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

休眠陷阱

發(fā)布時(shí)間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 休眠陷阱 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
我已經(jīng)使用Hibernate已有一段時(shí)間了,當(dāng)我一段時(shí)間不使用Hibernate項(xiàng)目時(shí),發(fā)現(xiàn)自己犯的錯(cuò)誤與上次相同。

因此,這是我的監(jiān)視清單,希望對(duì)其他人也有用。

實(shí)現(xiàn)hashCode和equals

一般而言,應(yīng)該始終實(shí)現(xiàn)這些方法,但對(duì)于實(shí)體,應(yīng)該多加注意。當(dāng)我說(shuō)等于時(shí),您想到的第一件事可能是使用Id來(lái)區(qū)分實(shí)例。 好吧,那會(huì)給您帶來(lái)很多麻煩。
您需要記住,您正在使用數(shù)據(jù)庫(kù)實(shí)體而不是普通的POJO。

當(dāng)Hibernate提取對(duì)象時(shí),您將使用collections,因此使用equals和hashCode來(lái)知道您要查找的對(duì)象是否在會(huì)話中。 對(duì)于新對(duì)象,id將為null或0。
這意味著當(dāng)試圖保存兩個(gè)相同類的對(duì)象時(shí),第二個(gè)對(duì)象將覆蓋第一個(gè)對(duì)象。
同樣,當(dāng)休眠保存新實(shí)例時(shí),它將設(shè)置id,從而使它成為完全相同的不同對(duì)象。 您需要使用一些業(yè)務(wù)密鑰。 唯一的代碼很棒,但是如果您什么都想不起,只需使用一個(gè)有意義的字段和一些時(shí)間戳(例如創(chuàng)建日期)即可使其唯一。

如果您想進(jìn)一步了解正在發(fā)生的事情, 這是一個(gè)很好的參考。

小心一對(duì)一和多對(duì)一關(guān)系

這是您真正需要知道的。
在關(guān)系的“一對(duì)一”側(cè)將關(guān)系映射為一對(duì)一或多對(duì)一時(shí), 除非將字段指定為不可為空,否則您 不能延遲加載 。
這是為什么?

本質(zhì)上,在關(guān)系的許多方面,hibernate可以使用集合代理,并在需要時(shí)延遲加載實(shí)例。 在“一個(gè)”一側(cè),沒有集合接口,而是對(duì)您的一個(gè)模型類的引用。

Hibernate也可以代理該代理,但前提是必須確保引用永遠(yuǎn)不會(huì)為空!
因此,請(qǐng)記住,如果要進(jìn)行延遲加載,請(qǐng)?jiān)谝粋?cè)與延遲注釋(或xml等效項(xiàng))一起使用not null。
如果您的關(guān)系可以為空,但是您仍然真的想使其變得懶惰,那么您可以使用以下選擇:

  • 創(chuàng)建一個(gè)值來(lái)表示該值。 例如,如果您具有諸如Person-& gtPartner之類的關(guān)系,則僅使用特定的Partner實(shí)例,即“無(wú)合作伙伴”。
  • 使用構(gòu)建時(shí)間檢測(cè)。 檢查一下
  • 使用列表偽造一側(cè)并使用get(0)獲取字段

有關(guān)休眠文檔的信息 。

啟用語(yǔ)句記錄

這是驗(yàn)證Hibernate確實(shí)在按預(yù)期執(zhí)行的唯一方法。 幸運(yùn)的是,您可以使用不同的日志記錄參數(shù)來(lái)找出HQL或SQL級(jí)別正在發(fā)生的事情。 您會(huì)驚訝于休眠狀態(tài)運(yùn)行查詢的次數(shù),而您沒有看到它。 從一開始就嘗試執(zhí)行此操作,并幫助團(tuán)隊(duì)了解擁有最佳和最少查詢的重要性,否則當(dāng)您在某些實(shí)際數(shù)據(jù)上運(yùn)行應(yīng)用程序時(shí),肯定會(huì)遇到性能問題。 要啟用日志記錄,只需在會(huì)話配置文件中設(shè)置此屬性

hibernate.show_sql=true

如果要查看格式正確的添加

hibernate.format_sql=true

觀察toString方法中的內(nèi)容。

這又與Hibernate在沒有真正意識(shí)到的情況下為您獲取的內(nèi)容有關(guān)。 很多時(shí)候,當(dāng)您看到查詢但無(wú)法弄清為什么要加載一些惰性列表時(shí),請(qǐng)檢查toString方法。
可能是罪魁禍?zhǔn)?#xff01;

您的休眠陷阱是什么?

參考: Hibernate陷阱! 來(lái)自我們的JCG合作伙伴在發(fā)展中博客上的 報(bào)道 。

相關(guān)文章 :
  • 休眠自動(dòng)提交命令強(qiáng)制MySQL在過(guò)多的磁盤I / O中運(yùn)行
  • DataNucleus 3.0與Hibernate 3.5
  • Hibernate映射集合性能問題
  • Spring MVC3 Hibernate CRUD示例應(yīng)用程序

翻譯自: https://www.javacodegeeks.com/2011/08/hibernate-gotchas-to-watch-out.html

總結(jié)

以上是生活随笔為你收集整理的休眠陷阱的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。