使用Spring解决CLOB字段的存取,记录一下,以备后用zzzzzzz...
首先使用网络上提供较多的解决办法,如下配置
<prop key="hibernate.connection.SetBigStringTryClob">true</prop>
<property name="context" type="text" column="context" />
private String context;//getter & setter 然后直接save BO :报错
Caused by: java.sql.SQLException: 不允许的操作: streams type cannot be used in batching
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.driver.OraclePreparedStatement.addBatch(OraclePreparedStatement.java:4073)
at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.addBatch(DelegatingPreparedStatement.java:172)
at org.hibernate.jdbc.BatchingBatcher.addToBatch(BatchingBatcher.java:53)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2275)
... 67 more
网友介绍,可以配置,<prop key="hibernate.jdbc.batch_size">0</prop>解决上述异常;系统里到处是批量提交,此方法不可取;
还有介绍:先保存CLOB字段为空,第二次update,却遇到CLOB类型转换异常;感觉挺麻烦,继续google[切换关键字组合];
下面是成功简单解决办法
writeLog() ,调用者要声明事物,没必要把writeLog放到一个独立事物里(PROPAGATION_REQUIRES_NEW)或放到嵌套事物里;
saveXXX(){ --<prop key="save*">PROPAGATION_REQUIRED</prop>即可
//business
writeLog();
}
<!-- Spring-hibernate.xml -->
<bean id="nativeJdbcExtractor"
class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"
lazy-init="true" />
<bean id="lobHandler"
class="org.springframework.jdbc.support.lob.OracleLobHandler"
lazy-init="true">
<property name="nativeJdbcExtractor">
<ref local="nativeJdbcExtractor" />
</property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource"><ref bean="dataSource"/></property>
<property name="lobHandler"><ref bean="lobHandler"/></property>
....
</bean>
<!--BO.hbm.xml-->
<property name="context"
type="org.springframework.orm.hibernate3.support.ClobStringType"
column="context" />
<!-- BO.java-->
private String context; //getter & setter 然后就可以使用Hibernate保存BO:OK
如果不配置事物,会报下列异常
//Spring 处理CLOB,未配置事物
Caused by: java.lang.IllegalStateException: Active Spring transaction synchronization or active JTA transaction with specified [javax.transaction.TransactionManager] required
at org.springframework.jdbc.support.lob.LobCreatorUtils.registerTransactionSynchronization(LobCreatorUtils.java:79)
at org.springframework.orm.hibernate3.support.AbstractLobType.nullSafeSet(AbstractLobType.java:185)
at org.hibernate.type.CustomType.nullSafeSet(CustomType.java:169)
文章引用:
http://space.itpub.net/10714335/viewspace-167565
环境:用jdk1.6.0_21+apache-tomcat-6.0.29+ojdbc14.jar+oracle10_db
分享到:
相关推荐
CLOB字段处理 对CLOB进行存取的例子
JDBC读写Oracle的CLOB字段
ORACLE中CLOB字段转String类型
把oracle数据库中字段类型为clob的字段值以字符串的形式读取出来
CLOB字段类型报错 ORA-01704:文字字符串过长的解决
DELPHI的CLOB和BLOB存取处理
dblink_clob字段异常解决方案,解决dblink连接远程数据库时无法使用clob字段的问题
关于在oracle数据库中读取clob大字段问题
是我自己验证过的 用的是oracle10数据库 文件里面有具体的配置。
oracle中使用jdbc读写clob字段,很多细节介绍,内容全面。
J2EE开发中,经常会遇到存储大文本的文字信息,而oracle数据库的vachar字段最大能存储4000个字节,存储更大的信息必须使用clob或blob字段,本文档就是针对j2ee开发中对colb字段操作的实现。
用Hiberate处理CLOB字段 ;通过Hiberate处理CLOB类型的数据;
一个完整的工程,主要功能为:spring+hbernate对clob、blob字段的处理 包括:数据脚本、典型的SSH框架处理,以及spring、hibernate数据批量保存等功能源码、所用到的lib包 数据环境为:oracle 10G 开发:Mycelipse5.1...
运用Java如何存取Oracle中的CLOB类型字段
最近在用oracle的过程中用到了对blob字段模糊查询的问题。接下来通过本文给大家分享关于oracle中clob字段查询慢的问题及解决方法,需要的的朋友参考下吧
Oracle如何插入CLOB字段值,附件为简单的示例代码。Oracle如何插入CLOB字段值,附件为简单的示例代码。
介绍了利用Hibernate将一个长字符串转换为流存储至Clob字段中,然后再从Clob字段中读出来,转换为字符串输出的方式
JDBC方式操作CLOB字段实例代码 。
ActiveXObject和Clob字段的插入更新
java读取oracle数据库中clob字段 把oracle数据库中字段类型为clob的字段值以字符串的形式读取出来