在Spring的主配置文件xx.xml中的配置SessionFactory的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;
}注:上面的swssessionfactorybean是被重写过的,继承annotationsessionfactorybean>
hibernate配置方法:
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();
}
}
配置方式:
再hibernate.cfg.xml中加入属性配置
< property="" name="hibernate.connection.SetBigStringTryClob">true
然后实体中,只要字段类型为String就行
Annotation配置方式(JPA方式)
使用String 为字段类型,然后配置@Clod
附带: blod类型
用byte[] 为类型,然后配置 @Blod注解
升级ojdbc驱动(问题依旧),我使用的驱动为ojdbc14.jar和ojdbc6.jar
增加hibernate全局配置:hibernate.jdbc.use_streams_for_binary=true
增加hibernate的type注解:@type(type="org.hibernate.type.materializedclobtype")
通过SPRING的处理方法。 你也可以在页面将前台传过来的FILE类型转换成: clob类型的,Hibernate.createClob(参数)即可插入。你可以看我的百度博客的第一篇文章,我最近在公司上传时也同样遇到了麻烦。如有不明白,可以追问或给我留言
好像以前我也碰到过类似的问题,那时候好像是在插入一个空值后再update来解决的。。。比较土。。。求高人解答。