火鸟过度伐木
Firebird excessive logging
我将 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 (default task-3) SQL Warning Code: 0, SQLState: 01000
09:54:00,384 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default
task-3) null
每次查询
日志记录由 Hibernate 完成,而不是由 Firebird 或 Jaybird 完成。发生这种情况的原因是因为您指定了 defaultResultSetHoldable=True
。此设置将使所有语句具有可持有性HOLD_CURSORS_OVER_COMMIT
。在 Jaybird 中 HOLD_CURSORS_OVER_COMMIT
是使用 TYPE_SCROLL_INSENSITIVE
实现的,但默认是 TYPE_FORWARD_ONLY
,因此 Jaybird 升级了结果集类型,并符合 JDBC 规范(第 15.1.1 节)。 JDBC 4.2 的第 1 个),这会注册一个警告,然后由 Hibernate 记录。
If the driver does not support the type supplied to the methods createStatement
, prepareStatement
, or prepareCall
, it generates an SQLWarning
on the Connection object that is creating the statement.
不幸的是,Jaybird 使用的 SQLWarning
子类中的错误导致消息是 null
而不是实际消息("Holdable result set must be scrollable.").
您的选择是不指定 defaultResultSetHoldable=True
或配置 Hibernate 以不使用配置 属性 hibernate.jdbc.log.warnings=false
.
记录警告
出于好奇:你为什么要指定 defaultResultSetHoldable=True
?这是一个可能对性能不利的选项,因为它将整个结果集缓存在驱动程序中,它主要用作在(自动)提交后尝试访问结果集的应用程序的解决方法。
我将 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 (default task-3) SQL Warning Code: 0, SQLState: 01000
09:54:00,384 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-3) null
每次查询
日志记录由 Hibernate 完成,而不是由 Firebird 或 Jaybird 完成。发生这种情况的原因是因为您指定了 defaultResultSetHoldable=True
。此设置将使所有语句具有可持有性HOLD_CURSORS_OVER_COMMIT
。在 Jaybird 中 HOLD_CURSORS_OVER_COMMIT
是使用 TYPE_SCROLL_INSENSITIVE
实现的,但默认是 TYPE_FORWARD_ONLY
,因此 Jaybird 升级了结果集类型,并符合 JDBC 规范(第 15.1.1 节)。 JDBC 4.2 的第 1 个),这会注册一个警告,然后由 Hibernate 记录。
If the driver does not support the type supplied to the methods
createStatement
,prepareStatement
, orprepareCall
, it generates anSQLWarning
on the Connection object that is creating the statement.
不幸的是,Jaybird 使用的 SQLWarning
子类中的错误导致消息是 null
而不是实际消息("Holdable result set must be scrollable.").
您的选择是不指定 defaultResultSetHoldable=True
或配置 Hibernate 以不使用配置 属性 hibernate.jdbc.log.warnings=false
.
出于好奇:你为什么要指定 defaultResultSetHoldable=True
?这是一个可能对性能不利的选项,因为它将整个结果集缓存在驱动程序中,它主要用作在(自动)提交后尝试访问结果集的应用程序的解决方法。