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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hibernate陷阱

發布時間:2023/12/3 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate陷阱 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我已經使用Hibernate已有一段時間了,當我一段時間不使用Hibernate項目時,發現自己犯的錯誤與上次相同。

因此,這是我的監視清單,希望對其他人也有用。

實現hashCode和equals

通常,應該始終實現這些方法,但是對于實體,應該多加注意。當我說等于時,您想到的第一件事可能是使用Id來區分實例。 好吧,那會給您帶來很多麻煩。
您需要記住,您正在使用數據庫實體而不是普通的POJO。

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

如果您想進一步了解正在發生的事情, 這是一個很好的參考。

小心一對一和多對一關系

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

基本上,在關系的許多方面,Hibernate都可以使用集合代理,并在需要時延遲加載實例。 在“一個”一側,沒有集合接口,而是對您的一個模型類的引用。

Hibernate也可以代理該主機,但前提是必須確保引用永遠不會為空!
因此,請記住,如果要進行延遲加載,請在一側與延遲注釋(或xml等效項)一起使用not null。
如果您的關系可以為空,但是您仍然真的想使其變得懶惰,那么您可以選擇以下方法:

  • 創建一個值來表示該值。 例如,如果您具有諸如Person-& gt; Partner之類的關系,則僅使用一個特定的Partner實例,即“無合作伙伴”。
  • 使用構建時間檢測。 檢查一下
  • 使用列表偽造一側并使用get(0)獲取字段

有關Hibernate文檔的信息 。

啟用語句記錄

這是驗證Hibernate確實在執行您期望他執行的操作的唯一方法。 幸運的是,您可以使用不同的日志記錄參數來找出HQL或SQL級別正在發生的事情。 您會驚訝Hibernate狀態運行查詢的次數,而您沒有發現它。 從一開始就嘗試執行此操作,并幫助團隊了解擁有最佳和最少查詢的重要性,否則當您在某些實際數據上運行應用程序時,肯定會遇到性能問題。 要啟用日志記錄,只需在會話配置文件中設置此屬性

hibernate.show_sql=true

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

hibernate.format_sql=true

觀察toString方法中的內容。

這又與Hibernate在沒有真正意識到的情況下為您獲取的內容有關。 很多時候,當您看到查詢但無法弄清為什么要加載一些惰性列表后,再檢查toString方法。
可能是罪魁禍首!

您的Hibernate陷阱是什么?

參考: Hibernate陷阱! 來自我們的JCG合作伙伴 在進行中的開發博客中 。

相關文章 :
  • Hibernate自動提交命令強制MySQL在過多的磁盤I / O中運行
  • DataNucleus 3.0與Hibernate 3.5
  • Hibernate映射集合性能問題
  • Spring MVC3 Hibernate CRUD示例應用程序

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

總結

以上是生活随笔為你收集整理的Hibernate陷阱的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。