火鸟过度伐木

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&amp;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?这是一个可能对性能不利的选项,因为它将整个结果集缓存在驱动程序中,它主要用作在(自动)提交后尝试访问结果集的应用程序的解决方法。