我正在使用带有Hibernate和一些JDBC的WildFly 10。我根本没有日志 如果我像这样声明我的数据源:
<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:bancoCOMPLEXO140116.FDB</connection-url>
但是如果我宣布通过:
?defaultResultSetHoldable=True&encoding=WIN1252
它记录
09:54:00,384 警告 [org.hibernate.engine.jdbc.spi.SqlExceptionHelper (默认任务-3) SQL 警告代码: 0, SQLState: 01000
09:54:00,384 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (默认任务-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
,则会在创建语句的连接对象上生成一个SQLWarning
。
不幸的是,Jaybird 使用的 SQLWarning
子类中的一个错误导致消息被null
而不是实际消息("可保留的结果集必须是可滚动的。
您的选项是未指定defaultResultSetHoldable=True
或使用配置属性 hibernate.jdbc.log.warnings=false
将 Hibernate 配置为不记录警告。
出于好奇:你为什么要指定defaultResultSetHoldable=True
?这是一个可能对性能不利的选项,因为它在驱动程序中缓存整个结果集,它主要用作在 (自动) 提交后尝试访问结果集的应用程序的解决方法。