火鸟过度伐木



我正在使用带有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&amp;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 记录。

如果驱动程序不支持提供给方法的类型 createStatementprepareStatementprepareCall ,则会在创建语句的连接对象上生成一个SQLWarning

不幸的是,Jaybird 使用的 SQLWarning 子类中的一个错误导致消息被null而不是实际消息("可保留的结果集必须是可滚动的。

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

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

相关内容

  • 没有找到相关文章

最新更新