hibernate 写入 clob 有关问题

hibernate 写入 clob 问题
   哎,今天辛苦了一天,就是为了使用hibernate实现clob字段的插入,我使用的环境是hibernate 3.0和class12的开发包,当执行到
。。。。。
            ssSession.save(cMail);
           ssSession.flush();
           szTypeID = cMail.getTypeId();
         ssSession.refresh(cMail, LockMode.UPGRADE);
  SerializableClob clob=(SerializableClob)cMail.getContent();
oracle.sql.CLOB tmpClob = (oracle.sql.CLOB) clob.getWrappedClob();
           java.io.Writer pw = tmpClob.getCharacterOutputStream();
           pw.write(strContent);
           pw.flush();
           pw.close();
           ssSession.flush();
           tx.commit();
时候总报出类型转化错误,但是我看实际取出来就是tmpClob oracle.sql.CLOB但是就是造型错误,真的要人命啊,在网上找了好久没有看到这个解决方法,有人说换最新的oracle驱动就可以了,但是我们现在工程已经做的差不多了,更新驱动可能会有很多问题,没有办法,只能找可有什么好点的方案,原来问题是
在我的netbeans bulid下面lib 中有class12.jar tomcat中的lib中也有class12.jar,两个重复的jar会造成造型错误,真的很郁闷,把工程中的依赖包删除就可以了,呵呵,希望以后朋友遇到这样的问题不要象我这样又重复了一天的工作,真的很不爽
1 楼 gumpgz 2006-09-29  
没这么复杂

1.clob直接对应string,在hbm.xml设置。
2.oracle8 9的驱动有问题,请用10g的驱动,他兼容8 9
3.使用的时候就像普通的字符串那样控制即可

最后,有一个问题,我一直没有解决:
当插入oracle clob字段的字符串长度在1000-2000之间,
写入肯定报错,如果小于1000或者大于2000都没有问题

你可以试试,按照如上的方法应该可以解决。
2 楼 YuLimin 2006-10-10  
netbeans bulid下面lib 中有class12.jar tomcat中的lib中也有class12.jar不什么不同吗?

如果用WebLogic里的Oracle连接池,你的程序还有问题的,要进行判断tmpClob类型,并进行分别处理。
3 楼 zzxplayful 2006-10-15  
import java.io.FileInputStream;
import java.io.OutputStream;

import org.hibernate.Hibernate;
import org.hibernate.LockMode;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.lob.SerializableBlob;
import org.hibernate.lob.SerializableClob;

import t_user.Testuser;

public class ReadOracleDemo {

/**
* @param args
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
Session session=HibernateSessionFactory.getSession();
Transaction tx=session.beginTransaction();
Testuser user=new Testuser();
user.setAge((long)24);
user.setId((long)5);
user.setName("xiaoxin");
user.setUsertype((long)2);
user.setVersion((long)1);
user.setPhoto(Hibernate.createBlob(new byte[1]));
user.setResume(Hibernate.createClob(" "));
session.save(user);
session.flush();

session.refresh(user, LockMode.UPGRADE);

SerializableBlob sb = (SerializableBlob)user.getPhoto();
java.sql.Blob wrapblob = sb.getWrappedBlob();
oracle.sql.BLOB blob = (oracle.sql.BLOB) wrapblob;
OutputStream output = blob.getBinaryOutputStream();
FileInputStream input=new FileInputStream("E:/PHOTO/baby/c0.jpg");
byte b []=new byte[80*1024];
input.read(b);

output.write(b);
input.close();
output.close();

SerializableClob sc=(SerializableClob)user.getResume();
java.sql.Clob wrapclob=sc.getWrappedClob();
oracle.sql.CLOB clob=(oracle.sql.CLOB)wrapclob;
java.io.Writer writer=clob.getCharacterOutputStream();
writer.write("This is the second clob");
session.save(user);
tx.commit();
}

}
这是我写的一个测试的方法,我用的就是classes12.jar  没有问题啊