休眠陷阱

我已經使用Hibernate已有一段時間了,當我一段時間不使用Hibernate項目時,發現自己犯的錯誤與上次相同。

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

實現hashCode和equals

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

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

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

小心一對一和多對一關系

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

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

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

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

有關休眠文檔的信息 。

啟用語句記錄

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

hibernate.show_sql=true

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

hibernate.format_sql=true

觀察toString方法中的內容。

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

您的休眠陷阱是什么?

參考: Hibernate陷阱! 來自我們的JCG合作伙伴在發展中博客上的 報道 。

相關文章 :
  • 休眠自動提交命令強制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

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

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

相關文章

HDU 5371 Hotaru's problem (Manacher,回文串)

題意:給一個序列,找出1個連續子序列,將其平分成前,中,后等長的3段子序列,要求【前】和【中】是回文,【中】和【后】是回文。求3段最長為多少?由于平分的關系,所以答案應該…

bash 與 dash

Ubuntu 的 bash和dash的區別 什么是bash ? Bash(GNU Bourne-Again Shell)是許多Linux平臺的內定Shell,事實上,還有許多傳統UNIX上用的Shell,像tcsh、csh、ash、bsh、ksh等 等,Shell Script大致都類同,當您學…

350. 兩個數組的交集 II

給你兩個整數數組 nums1 和 nums2 ,請你以數組形式返回兩數組的交集。返回結果中每個元素出現的次數,應與元素在兩個數組中都出現的次數一致(如果出現次數不一致,則考慮取較小值)。可以不考慮輸出結果的順序。 來源&a…

Eclipse:如何附加Java源代碼

在Eclipse中,當您按Ctrl按鈕并單擊任何類名稱時,IDE會將您帶到該類的源文件。 這是項目中具有的類的正常行為。 但是,如果您也希望Java核心類具有相同的行為,則可以通過將Java源代碼附加到Eclipse IDE來實現。 一旦附加了源代碼&a…

【樹狀數組】

問題的提出:是否可以用線性數據結構的方法解決動態統計子樹權和的問題呢? 有的,樹狀數組。 假設當前數組為a[],元素個數為n。 1. 子區間的權和數組為sum,那么數組a[]中 i 到 j這段區間的數組元素和為sum[i,j] a[k]的累…

2013VS快捷鍵

VS2013常用快捷鍵: 1.回到上一個光標位置/前進到下一個光標位置 1)回到上一個光標位置:使用組合鍵“Ctrl -”; 2)前進到下一個光標位置:“Ctrl Shift - ”。 2.復制/剪切/刪除整行代碼 1)如果…

GWT,GWT-Ext(SmartGWT),GXT(Ext GWT)常見任務

我在我們的JCG合作伙伴之一UI-Programming博客上瀏覽了一些舊文章,并注意到有很多簡短的文章,介紹了如何使用GWT,GWT-Ext(SmartGWT)和GXT(Ext GWT)執行一些常見任務。 )。 我相信它們…

h.264 去塊濾波

塊效應及其產生原因 我們在觀看視頻的時候,在運動劇烈的場景常能觀察到圖像出現小方塊,小方塊在邊界處呈現不連續的效果(如下圖),這種現象被稱為塊效應(blocking artifact)。 首先我們需要搞清楚…

android開發的知識點(一)

1.android中背景圖的設置: 將背景圖放入到項目中的res/drawable-hdpi或res/drawable-mdpi或res/drawable-xhdpi或res/drawable-xxhdpi等任一文件夾下。然后在layout的xml文件夾下使用android:background"drawable/背景圖名",其中背景圖必須是p…

566. 重塑矩陣

在 MATLAB 中,有一個非常有用的函數 reshape ,它可以將一個 m x n 矩陣重塑為另一個大小不同(r x c)的新矩陣,但保留其原始數據。 給你一個由二維數組 mat 表示的 m x n 矩陣,以及兩個正整數 r 和 c &…

RabbitMQ播放模塊! 構架

RabbitMQ提供了具有可預測且一致的吞吐量和延遲的高可用性,可伸縮和便攜式消息系統。 RabbitMQ是AMQP (業務消息傳遞的開放標準)的領先實現 ,并且通過適配器支持XMPP,SMTP,STOMP和HTTP來進行輕量級Web消息傳…

Cyclic Nacklace - HDU 3746(next求循環節)

題目大意:給你一些串,問如果想讓這個串里面的循環節至少循環兩次,需要添加幾個字符(只能在最前面或者最后面添加)。比如ababc 需要添加5個就是添加ababc。 分析:其實字符串的長度len-next[len] 最小循環節…

Xuggler開發教程

大家好, 在這篇文章中,我想介紹JavaCodeGeeks上的一些很酷的新教程。 他們將討論與Xuggler , FFmpeg和Wowza進行媒體(音頻/視頻)操縱的方式。 我將在這篇文章中跟蹤所有相關的教程。 您可以通過查看Pat較早的關于使用…

739. 每日溫度

請根據每日 氣溫 列表 temperatures ,請計算在每一天需要等幾天才會有更高的溫度。如果氣溫在這之后都不會升高,請在該位置用 0 來代替。 代碼一 單調棧 class Solution {public int[] dailyTemperatures(int[] temperatures) {int length temperatur…

一個非常好的性格切割問題

結伙stackoverflow看到一道非常不錯的問題。遂拿來分享之。 題目要求:我有一個非常長的字符串: String s1"This is my world. This has to be broken." 我要把上面的字符串打亂以固定的長度(比如10)使得輸出為&#xff…

Cajo,用Java完成分布式計算的最簡單方法

摘自Jonas Boner在2006年5月1日發布在TheServerSide.com上的文章“ Distributed Computing Easy”中的介紹部分: 分布式計算在企業應用程序開發世界中變得越來越重要。 如今,開發人員不斷需要解決以下問題:如何通過將應用程序擴展到單個節點之…

Java中Integer.parseInt()用法

1.先看看該方法的實現 public static int parseInt(String s) throws NumberFormatException {return parseInt(s,10);}2.事實上他可以有兩個參數, public static int parseInt(String s,int radix)意味著將字符串s按照radix進制轉換成整數。太抽象了,…

關于maven相互依賴的工程部署問題

環境:win7 64位,myeclipse10.6,eclipse4.5,都配置了svn插件 問題描述:1、工程模塊化之后都是通過pom配置model來關聯的,svn提交之后,通過myeclipse的svn‘檢出為項目’,依賴的子工程…

什么是JAR包?

jar包就是別人已經寫好的一些類,然后將這些類進行打包,你可以將這些jar包引入你的項目中,然后就可以直接使用這些jar包中的類和屬性了,這些jar包一般都會放在lib目錄下的 轉載于:https://www.cnblogs.com/wulianshang/p/5513474.h…

....

輸入流和輸出流相對于內存設備而言. 將外設中的數據讀取到內存中:輸入將內存的數寫入到外設中:輸出。 字符流的由來:其實就是:字節流讀取文字字節數據后,不直接操作而是先查指定的編碼表。獲取對應的文字。在對這個文字進行操作。…