Firebird记录了这么多

时间:2016-03-04 13:19:34

标签: hibernate jdbc firebird jaybird

我正在使用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(默认任务-3)SQL警告代码:0,SQLState:01000

     

09:54:00,384 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper](默认   task-3)null

每次查询

1 个答案:

答案 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记录。

  

如果驱动程序不支持方法createStatementprepareStatementprepareCall提供的类型,则会在正在创建的方法的Connection对象上生成SQLWarning言。

不幸的是,Jaybird使用的SQLWarning子类中的错误导致消息为null而不是实际消息(&#34;可保持结果集必须可滚动。&# 34。

您的选项要么未指定defaultResultSetHoldable=True,要么将Hibernate配置为不使用配置属性hibernate.jdbc.log.warnings=false记录警告。

出于好奇:你为什么要指定defaultResultSetHoldable=True?这是一个对性能有害的选项,因为它将整个结果集缓存在驱动程序中,它主要用于在(自动)提交后尝试访问结果集的应用程序的解决方法。