禁用上下文LOB创build为createClob()方法抛出错误
我正在使用Oracle 10g的Hibernate 3.5.6。 我在初始化过程中看到下面的exception,但应用程序本身工作正常。 这个exception的原因是什么? 以及如何纠正?
例外
禁用上下文LOB创build为createClob()
方法抛出错误: java.lang.reflect.InvocationTargetException
信息
Oracle版本:Oracle数据库10g企业版版本10.2.0.4.0 JDBC驱动程序:Oracle JDBC驱动程序,版本:11.1.0.7.0
正如你注意到的,这个例外不是一个真正的问题。 它在启动过程中发生,当Hibernate尝试从数据库中检索一些元信息时。 如果这让你很烦,你可以禁用它:
hibernate.temp.use_jdbc_metadata_defaults false
从源头上看评论:
基本上这里我们只是简单地检查我们是否可以调用在JDBC 4中添加的创buildLOB的java.sql.Connection方法。我们不仅检查java.sql.Connection是否声明这些方法,而且检查实际的java.sql.Connection实例实现它们(即可以调用,而无需简单地抛出exception)。
所以,它试图确定它是否可以使用一些新的JDBC 4方法。 我猜你的驱动可能不支持新的LOB创build方法。
摆脱例外
INFO - HHH000424: Disabling contextual LOB creation as createClob() method threw error :java.lang.reflect.InvocationTargetException
在hibernate.cfg.xml
文件中添加下面的属性
<property name="hibernate.temp.use_jdbc_metadata_defaults">false</property>
更新JDBC驱动程序到最新版本删除了令人讨厌的错误消息。
你可以在这里下载:
http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html
免费注册是必需的。
通过添加属性来禁用此警告。
对于Spring应用程序:
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
普通JPA:
hibernate.temp.use_jdbc_metadata_defaults=false
发生这个问题是因为你没有select合适的JDBC。 只需下载并使用JDBC for Oracle 10g而不是11g。
使用Hibernate 4.3.x / 5.0.x更新到这个 – 你可以设置这个属性为true:
<prop key="hibernate.jdbc.lob.non_contextual_creation">true</prop>
摆脱那个错误信息。 同样的效果,但没有“抛出exception”的细节。 有关详细信息,请参阅LobCreatorBuilder源代码。
检查你是否不在VPN上。 我有同样的问题,但实现了我连接到远程的数据库!
如果您使用java.sql。*类,则删除@Temporal注释。