有没有人听说过这个错误:
我有一个 Java 5 应用程序,它使用 Hibernate 3.3.2 访问 Oracle 数据库 10g,JDBC 驱动程序是 Oracle 轻驱动程序版本 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,当然)。