【问题标题】:Cannot save clob data type in database (Struts, Spring, Hibernate)无法在数据库中保存 clob 数据类型(Struts、Spring、Hibernate)
【发布时间】:2010-01-22 06:14:10
【问题描述】:
@Column(name="transpired")
@Lob
private String transpired;
public String getTranspired() {
    return transpired;
}
public void setTranspired(String transpired) {
    this.transpired = transpired;
}

我尝试在我们的模型类中使用以下代码。 Transpired 是一个包含长文本消息(报告)的字段。查看“报告”时,它会从数据库中检索数据并在我们的 UI 中正确显示。但是,当我保存(在编辑或创建时)报表时,数据库中保存的字段为 (null)。

知道如何保存长文本吗?我们之前使用的是 varchar2(4000),但大多数报告都超过 4000 个字符。

谢谢。

编辑: 我正在使用 Oracle 10g。列类型为 CLOB。

【问题讨论】:

  • 你的数据库是?另外,您现在使用什么列类型?
  • Oracle10g.列类型为 CLOB。

标签: java oracle hibernate spring clob


【解决方案1】:

众所周知,Oracle 提供的 POS 瘦驱动程序会在您尝试保存超过 4K 时自动且静默地使 CLOB 字段无效(保存超过 4K,这对 cLob 来说太棒了)。然而,当使用标准 API(Hibernate 所做的)与 Oracle 10g JDBC 驱动程序(参见 Handling Clobs in Oracle 10g)时,这应该起作用。令人惊讶的是,许多线程(例如this one)提到了与旧版本的 Oracle 10g 瘦驱动程序类似的问题,因此请确保您使用Oracle 10g Release 2 drivers(选择最新的 ojdbc14.jar,即 10.2.0.4)或更高版本

请注意,Oracle 有一个limitation of 32K for CLOBs。要克服此限制,您需要将连接属性SetBigStringTryClob 设置为true。根据各种消息来源,您似乎还需要禁用 JDBC 批处理(即将batch_size 设置为0)。

为此,请将以下属性添加到您的 hibernate.cfg.xml(或您的 Spring 配置中)。

<!-- Tell Oracle to allow CLOBs larger than 32K -->
<property name="hibernate.connection.SetBigStringTryClob">true</property>
<property name="hibernate.jdbc.batch_size">0</property>

【讨论】:

  • 将尝试这样做。谢谢:)
【解决方案2】:

使用 oracle9i 我遇到了同样的问题,但我无法解决,我不得不通过 JDBC 手动完成,但在 JPA 中它是小菜一碟。我不知道他们是否在hibernate中解决了它,这是一年半前的事情:(

【讨论】:

  • 不是hibernate的问题,是Oracle瘦驱动的问题(使用Oracle 10g Release 2及以后的驱动应该可以解决)。
【解决方案3】:

如果想通过休眠插入数据,请在您的 springs XML 中添加以下代码

<property name="hibernate.connection.SetBigStringTryClob">true</property>
 <property name="hibernate.jdbc.batch_size">0</property>

<prop key="hibernate.connection.SetBigStringTryClob">true</prop>
 <prop key="hibernate.jdbc.batch_size">0</prop>

如果您有兴趣通过 JDBC 添加,请在您的数据源中添加以下代码,例如 JBOSS 的 Oracle-ds.xml

<connection-property name="SetBigStringTryClob">true</connection-property> 

确保您使用最新的 ojdbc14.jar 并用于 JDBC 连接,并且像 classes12.jar 这样的一些 jar 会阻碍保存巨大的 clob。所以将 classes12.jar 替换为 ojdbc14.jar

这对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 2015-09-18
    • 2010-12-29
    • 2017-05-24
    相关资源
    最近更新 更多