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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hibernate 调试_Hibernate调试–查找查询的来源

發布時間:2023/12/3 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hibernate 调试_Hibernate调试–查找查询的来源 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

hibernate 調試

Hibernate為何在程序的哪個部分以及在哪個部分中生成給定SQL查詢并不總是立即的,尤其是當我們處理的是我們自己編寫的代碼時。

這篇文章將介紹如何配置Hibernate查詢日志記錄,并將其與其他技巧一起使用,以找出在程序中執行給定查詢的原因和位置。

Hibernate查詢日志是什么樣的

Hibernate具有內置的查詢日志,如下所示:

select /* load your.package.Employee */ this_.code, ... from employee this_ where this_.employee_id=?TRACE 12-04-2014@16:06:02 BasicBinder - binding parameter [1] as [NUMBER] - 1000

Hibernate為什么無法記錄實際查詢?

注意,Hibernate記錄的是Hibernate發送到JDBC驅動程序的準備好的語句及其參數。 準備好的陳述有? 在準備好的語句下面,將代替查詢參數記錄參數值本身。

這與發送到數據庫的實際查詢不同,因為Hibernate無法記錄實際查詢。 原因是Hibernate只知道準備好的語句以及它發送給JDBC驅動程序的參數,而驅動程序將構建實際的查詢,然后將其發送到數據庫。

為了使用實際查詢生成日志,需要使用log4jdbc之類的工具,該工具將是另一篇文章的主題。

如何找出查詢的來源

上面記錄的查詢包含一個注釋,該注釋可以在大多數情況下標識查詢的來源:如果查詢是由于按ID加載而引起的,則注釋為/* load your.entity.Name */ ,如果它是命名查詢,則注釋將包含查詢的名稱。

如果是一對多的延遲初始化,則注釋將包含類的名稱和觸發它的屬性,等等。

設置Hibernate查詢日志

為了獲得查詢日志,需要在會話工廠的配置中設置以下標志:

<bean id= "entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" >...<property name="jpaProperties" ><props><prop key="hibernate.show_sql" >true</ prop><prop key="hibernate.format_sql" >true</ prop><prop key="hibernate.use_sql_comments">true</prop></props> </property>

上面的示例用于實體管理器工廠的Spring配置。 這是標志的含義:

  • show_sql啟用查詢日志記錄
  • format_sql漂亮打印SQL
  • use_sql_comments添加了說明性注釋

為了記錄查詢參數,需要以下log4j或等效信息:

<logger name="org.hibernate.type"><level value="trace" /> </logger >

如果一切都失敗了

在許多情況下, use_sql_comments創建的注釋足以識別查詢的來源。 如果這還不夠,那么我們可以根據所涉及的表名從查詢返回的實體開始,然后在返回的實體的構造函數中放置一個斷點。

如果實體沒有構造函數,那么我們可以創建一個構造函數并將斷點放在對super()的調用中:

@Entity public class Employee {public Employee() {super(); // put the breakpoint here}... }

遇到斷點時,請轉到包含程序的堆棧調用的IDE調試視圖,并從上至下進行遍歷。 在程序中進行查詢的位置將在調用堆棧中。

翻譯自: https://www.javacodegeeks.com/2014/06/hibernate-debugging-finding-the-origin-of-a-query.html

hibernate 調試

總結

以上是生活随笔為你收集整理的hibernate 调试_Hibernate调试–查找查询的来源的全部內容,希望文章能夠幫你解決所遇到的問題。

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