oracle - hibernate +Oracle+Clob : Content of attributes get switched

标签 oracle hibernate jpa clob

以前有没有人听说过这个错误:

我有一个 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/

相关文章:

c# - 连接到 Oracle 数据库时出现 OracleException (0x80004005)

sql - Oracle 不能推断这些查询是相同的——生成了非常不同的执行计划

java - 我想最小化@Transactional 的范围吗?

oracle - 如何在oracle中使null等于null

sql - REGEXP 用于字符串格式化,以对用空格分隔的字符和数字进行分组

java - hibernate : Java Application must be restarted for data to be realoaded

hibernate -如何限制多个用户同时读取记录?

java - 使用 Spring Data Jpa 获取连接对象

java - 使用 JAX-WS 进行客户端应用程序身份验证

java - JPA 每组最新行