Hibernate如何处理clob字段?
6个回答
展开全部
hibernate配置方法:
<property name="textValue" column="TEXT_VALUE" type="clob" length="100000"/>
java代码:
public void update(DocumentData obj, String value)
throws HibernateException, Exception
{
Session s = null;
Writer out = null;
try
{
s = getSession();
s.flush();
Transaction tx = s.beginTransaction();
s.refresh(obj, LockMode.UPGRADE);//锁定更新记录;
CLOB clob = (CLOB) obj.getTextValue();
if (clob != null)
{
out = clob.getCharacterOutputStream();
out.write(value);
out.flush();//刷新内容,同步session和数据库内容。
out.close();
} else
{
obj.setTextValue(Hibernate.createClob(value == null ? ""
: value));
}
tx.commit();
} finally
{
if (null != s)
{
s.close();
}
if (out != null)
{
out.close();
}
}
}
public void insert(DocumentData obj)
throws HibernateException, Exception
{
Transaction t = null;
Session s = null;
try {
s = getSession();
t = s.beginTransaction();
s.save(obj);//obj对象包含Clob属性内容,可以直接insert
t.commit();
}
catch (HibernateException e) {
if (null != t) t.rollback();
throw e;
}
finally {
if (null != s) s.close();
}
}
<property name="textValue" column="TEXT_VALUE" type="clob" length="100000"/>
java代码:
public void update(DocumentData obj, String value)
throws HibernateException, Exception
{
Session s = null;
Writer out = null;
try
{
s = getSession();
s.flush();
Transaction tx = s.beginTransaction();
s.refresh(obj, LockMode.UPGRADE);//锁定更新记录;
CLOB clob = (CLOB) obj.getTextValue();
if (clob != null)
{
out = clob.getCharacterOutputStream();
out.write(value);
out.flush();//刷新内容,同步session和数据库内容。
out.close();
} else
{
obj.setTextValue(Hibernate.createClob(value == null ? ""
: value));
}
tx.commit();
} finally
{
if (null != s)
{
s.close();
}
if (out != null)
{
out.close();
}
}
}
public void insert(DocumentData obj)
throws HibernateException, Exception
{
Transaction t = null;
Session s = null;
try {
s = getSession();
t = s.beginTransaction();
s.save(obj);//obj对象包含Clob属性内容,可以直接insert
t.commit();
}
catch (HibernateException e) {
if (null != t) t.rollback();
throw e;
}
finally {
if (null != s) s.close();
}
}
2015-10-20 · 知道合伙人互联网行家
关注
展开全部
在spring中采用OracleLobHandler来处理oracle大字段(包括clob和blob),则在程序中不需要引用oracle的特殊类,从而能够保证支持代码支持多数据库。
在Spring的主配置文件xx.xml中的配置SessionFactory的bean中配置:
<bean id="nativeJdbcExtractor"
class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"
lazy-init="true" autowire="default" dependency-check="default"/>
<bean id="oracleLobHandler"
class="org.springframework.jdbc.support.lob.OracleLobHandler"
lazy-init="true" autowire="default" dependency-check="default">
<property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"/>
</bean>
<bean id="sessionFactory"
class="org.hibernate.cfg.SWSSessionFactoryBean" lazy-init="false"
autowire="default" dependency-check="default">
...
<property name="lobHandler">
<ref bean="oracleLobHandler"/>
</property>
...
</bean>
nativeJdbcExtractor和 lobHandler 设置为 lazy-init="true",
因为 nativeJdbcExtractor需要通过运行期的反射机制获取底层的 JDBC 对象,
所以需要避免在 Spring 容器启动时就实例化这两个 Bean。
<注:上面的SWSSessionFactoryBean是被重写过的,继承AnnotationSessionFactoryBean>
1、首先数据表中的clob类型对应java持久化类的String类型;而blob类型对应byte[]类型
2、1.定义
hibernate标签时,持久化类中对应clob类型的属性的hibernate
type应为org.springframework.orm.hibernate.support.ClobStringType;而对应blob类型
的属性的hibernate
type应为org.springframework.orm.hibernate.support.BlobByteArrayType。
2.如果通过spring 注解功能配置PoJo类时,在该大字段属性的getXXX()方法前面加上注解:
public String xxx;
...
@Lob
@Type(type="org.springframework.orm.hibernate3.support.ClobStringType")
@Column(length=10000)
public String getXXX ()
{
return xxx;
}
在Spring的主配置文件xx.xml中的配置SessionFactory的bean中配置:
<bean id="nativeJdbcExtractor"
class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"
lazy-init="true" autowire="default" dependency-check="default"/>
<bean id="oracleLobHandler"
class="org.springframework.jdbc.support.lob.OracleLobHandler"
lazy-init="true" autowire="default" dependency-check="default">
<property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"/>
</bean>
<bean id="sessionFactory"
class="org.hibernate.cfg.SWSSessionFactoryBean" lazy-init="false"
autowire="default" dependency-check="default">
...
<property name="lobHandler">
<ref bean="oracleLobHandler"/>
</property>
...
</bean>
nativeJdbcExtractor和 lobHandler 设置为 lazy-init="true",
因为 nativeJdbcExtractor需要通过运行期的反射机制获取底层的 JDBC 对象,
所以需要避免在 Spring 容器启动时就实例化这两个 Bean。
<注:上面的SWSSessionFactoryBean是被重写过的,继承AnnotationSessionFactoryBean>
1、首先数据表中的clob类型对应java持久化类的String类型;而blob类型对应byte[]类型
2、1.定义
hibernate标签时,持久化类中对应clob类型的属性的hibernate
type应为org.springframework.orm.hibernate.support.ClobStringType;而对应blob类型
的属性的hibernate
type应为org.springframework.orm.hibernate.support.BlobByteArrayType。
2.如果通过spring 注解功能配置PoJo类时,在该大字段属性的getXXX()方法前面加上注解:
public String xxx;
...
@Lob
@Type(type="org.springframework.orm.hibernate3.support.ClobStringType")
@Column(length=10000)
public String getXXX ()
{
return xxx;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
配置方式:
再hibernate.cfg.xml中加入属性配置
< property name="hibernate.connection.SetBigStringTryClob">true</ property>
然后实体中,只要字段类型为String就行
Annotation配置方式(JPA方式)
使用String 为字段类型,然后配置@Clod
附带: blod类型
用byte[] 为类型,然后配置 @Blod注解
再hibernate.cfg.xml中加入属性配置
< property name="hibernate.connection.SetBigStringTryClob">true</ property>
然后实体中,只要字段类型为String就行
Annotation配置方式(JPA方式)
使用String 为字段类型,然后配置@Clod
附带: blod类型
用byte[] 为类型,然后配置 @Blod注解
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
通过SPRING的处理方法。 你也可以在页面将前台传过来的FILE类型转换成: clob类型的,Hibernate.createClob(参数)即可插入。你可以看我的百度博客的第一篇文章,我最近在公司上传时也同样遇到了麻烦。如有不明白,可以追问或给我留言
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在DB里建成CLOB类型,在程序这边配置成String也可以~`
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询