我正在使用WildFly 10和Hibernate以及一些JDBC。 我根本没有日志如果我声明我的数据源是这样的:
<datasource jta="true" jndi-name="java:jboss/Firebird" pool-name="FirebirdPool" enabled="true" spy="true" use-ccm="true" statistics-enabled="false">
<connection-url>jdbc:firebirdsql:localhost/3050:C:\banco\COMPLEXO140116.FDB</connection-url>
但如果我宣布传递:
?defaultResultSetHoldable=True&encoding=WIN1252
记录
09:54:00,384 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper(默认任务-3)SQL警告代码:0,SQLState:01000
09:54:00,384 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper](默认 task-3)null
每次查询
答案 0 :(得分:3)
日志记录由Hibernate完成,而不是由Firebird或Jaybird完成。发生这种情况的原因是您指定了defaultResultSetHoldable=True
。此设置将使所有语句都具有可保持性HOLD_CURSORS_OVER_COMMIT
。在Jaybird HOLD_CURSORS_OVER_COMMIT
中使用TYPE_SCROLL_INSENSITIVE
实现,但默认值为TYPE_FORWARD_ONLY
,因此Jaybird升级结果集类型,并符合JDBC规范(JDBC 4.2的第15.1.1节) ),这会注册一个警告,然后由Hibernate记录。
如果驱动程序不支持方法
createStatement
,prepareStatement
或prepareCall
提供的类型,则会在正在创建的方法的Connection对象上生成SQLWarning
言。
不幸的是,Jaybird使用的SQLWarning
子类中的错误导致消息为null
而不是实际消息(&#34;可保持结果集必须可滚动。&# 34。)
您的选项要么未指定defaultResultSetHoldable=True
,要么将Hibernate配置为不使用配置属性hibernate.jdbc.log.warnings=false
记录警告。
出于好奇:你为什么要指定defaultResultSetHoldable=True
?这是一个对性能有害的选项,因为它将整个结果集缓存在驱动程序中,它主要用于在(自动)提交后尝试访问结果集的应用程序的解决方法。