Java 在org.hibernate.exception.genericjdbception的堆栈跟踪中显示导致sql查询的原因

Java 在org.hibernate.exception.genericjdbception的堆栈跟踪中显示导致sql查询的原因,java,mysql,hibernate,Java,Mysql,Hibernate,我一直在查看org.hibernate.exception.genericjdbception的stacktrace,以找出导致查询的SQL查询或表。但是,我的尝试是徒劳的(没有调试),因为我看到的只是以下内容: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update ... Caused by: org.hi

我一直在查看
org.hibernate.exception.genericjdbception
的stacktrace,以找出导致查询的SQL查询或表。但是,我的尝试是徒劳的(没有调试),因为我看到的只是以下内容:

javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
...
Caused by: org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
...
Caused by: java.sql.BatchUpdateException: Data truncated for column 'category' at row 1
...
Caused by: java.sql.SQLException: Data truncated for column 'category' at row 1
...
然而,如果我为
genericjdbception
设置一个条件断点并调试到代码中,我注意到
genericjdbception
实际上有一个名为sql的字段,它向我显示了错误涉及的表/sql

在我的例子中,这是
updateconfig_OptionRef set category=?,fk_option=?,refKey=?其中id=?
,所以现在我至少知道了相应的表名

这就是问题所在。是否可以让hibernate在stacktrace中显示此信息


谢谢

我不认为您可以在stacktrace中执行此操作,但您可以为hibernate SQL设置org.hibernate.SQL记录器以进行跟踪,如果您还需要参数,记录器为org.hibernate.type。但这将打印每个sql查询,这可能并不完全是您想要的:/确切地说,我不想要每个查询,只想要导致错误的查询。我不明白,为什么它不显示在堆栈跟踪中,因为所有信息实际上都在那里…如果您从hibernate查看SqlExceptionHelper,那里有一个记录器,它在调试时记录sql,也许你可以尝试一下,我不认为你可以在stacktrace中这样做,但是你可以为hibernate SQL设置org.hibernate.SQL记录器进行跟踪,如果你也需要参数,记录器是org.hibernate.type。但这将打印每个sql查询,这可能并不完全是您想要的:/确切地说,我不想要每个查询,只想要导致错误的查询。我不明白,为什么它不显示在堆栈跟踪中,因为所有的信息实际上都在那里…如果您从hibernate查看SqlExceptionHelper,那里有一个记录器,在调试时它会记录sql,也许您可以尝试一下