无法在数据库中保存clob数据类型(Struts,Spring,Hibernate)

@Column(name="transpired") @Lob private String transpired; public String getTranspired() { return transpired; } public void setTranspired(String transpired) { this.transpired = transpired; } 

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

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

谢谢。

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

众所周知,Oracle提供的POS瘦驱动程序可以在您尝试节省超过4K时自动静默地使CLOB字段无效(节省4K以上,cLob令人惊叹)。 然而,当使用标准API(Hibernate所做的)与Oracle 10g JDBC驱动程序(参见Oracle 10g中的处理Clobs )时,这应该是可行的。 令人惊讶的是,许multithreading(例如这一个 )在旧版Oracle 10g瘦驱动程序中提到了类似的问题,因此请确保使用Oracle 10g第2版驱动程序 (获取最新的ojdbc14.jar,即10.2.0.4) 或更高版本

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

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

  true 0 

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

如果想通过hibernate插入数据,请在spring XML中添加以下代码

 true 0 

要么

 true 0 

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

 true 

确保使用最新的ojdbc14.jar和JDBC连接,并且像classes12.jar这样的一些jar阻碍了保存巨大的clob.So用ojdbc14.jar替换classes12.jar

这对我有用。