hibernate处理长字符串存储oracle 10g的clob类型
最近项目中(SSH2+ORACLE 10g)出现对长字符串处理的问题终于搞定了,在此记录一下
表中有一个字段 content clob
create table table_name
(
...
content clob not null,
...
)
(1)在使用ojdbc14.jar的情况下(批量处理有影响)
使用注解
@Lob
@Basic(fetch = FetchType.EAGER)
@Column(columnDefinition="CLOB", nullable=false)
public String getContent() {
return content;
}
如果设置了
<!-- 数据库批量更新数 -->
hibernate.jdbc.batch_size=0
此时是没问题的
但设置了批量更新数的话就不可以了 如
hibernate.jdbc.batch_size=30
当汉字字符串长度大于666,插入数据必须使用流式方式,且最大长度不能超过2000个中文字符.当采用流式方式插入数据时,不能使用批处理
原因是PreparedStatement.setStringindex,StringValue)方法对StringValue的char长度有限制,并且一个中文字符占3个char,故只能输入666个汉字。插入英文字符时,至多只能插入2000个
(2)在使用classes12.jar的情况下(批量处理没有影响)
直接使用注解即可
@Lob
@Basic(fetch = FetchType.EAGER)
@Column(columnDefinition="CLOB", nullable=false)
public String getContent() {
return content;
}
或者使用
@Type(type="org.springframework.orm.hibernate3.support.ClobStringType")
public String getContent() {
return content;
}
此时要配置一下
<!--定义一个 lobHandler-->
<bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true" />
<!--lobHandler必须注入到Hibernate会话工厂sessionFactory中-->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="lobHandler" ref="lobHandler"/>
...
</bean>
至此 对象中直接申明成String就可以处理clob类型
上一篇: 系统内存检测