以前有没有人听说过这个错误:
我有一个 Java 5 应用程序,它使用 Hibernate 3.3.2 访问 Oracle 数据库 10g,JDBC 驱动程序是 Oracle light 驱动程序版本 10.2.0.4.0(我认为是最新版本)。 数据库访问发生在通过 spring 的 AOP 工具管理的事务期间。 有一个数据库表映射到一个 Java 实体,映射是通过注释完成的。这个实体中有两个属性是数据库中的 CLOB。它们根据 JPA 使用“Lob”进行注释并且是 Java 字符串。一切正常,除非两个属性的值都超过 4000 个字符:提交后,值在数据库中切换,即属性 A 包含属性 B 的值,反之亦然。
这不是开玩笑!
Eclipse 调试器告诉我 Java 实体在事务关闭之前具有正确的值(我没有调试到 spring 事务处理)。 如果两个 Clob 都使用 Hibernate 注释 'Type(type = "clob")' 进行注释(在这种情况下,它们必须是 java.sql.Clob 类型,而不是 String,当然),则不会发生此错误。
最佳答案
我不是 100% 确定,但您能否尝试将连接属性 SetBigStringTryClob
设置为 true
(参见 How To Handle CLOBs Easily in JDBC?)。
如果您使用的是 Spring,则如下所示:
<property name="hibernateProperties">
<props>
<prop key="hibernate.connection.SetBigStringTryClob">true</prop>
</props>
</property>
关于oracle - hibernate +Oracle+Clob : Content of attributes get switched,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3178054/