hibernate处理oracle 大字符数据CLOB

项目中遇到要对Oralce数据库的CLOB字段进行处理的问题,即实现对CLOB值的插入,更新,查询。 Clob的的操作一般有三种方法:1。JDBC的方法。2:把clob当作String来处理。3.直接使用Clob。这里我介绍的是第三种方法。使用 Hibernate3 来管理数据库的连接session。
这里用第三种方法。
1.在实体类里 定义一个CLOB 类型 和一个对它辅助用的字符串类型属性。如下:
private Clob clobnewscontent;
private String newscontent;
对应的映射文件由于newscontent只是辅助作用在数据库表里没有对应的列。所以不用配置。clobnewscontent属性配置如下:
<property name="clobnewscontent" type="clob" update="true" insert="true" >
            <column name="NEWSCONTENT"  />
</property>

newscontent用于接收页面传来的字符串信息。

下面说具体写入数据处理
插入: Session session= null;
Transaction tx =null;
try{
session =this.getHibernateTemplate().getSessionFactory().openSession();

news.setClobnewscontent(Hibernate.createClob(" "));

tx=session.beginTransaction();
session.save(news);
session.flush();

session.refresh(news, LockMode.UPGRADE); 

org.hibernate.lob.SerializableClob cb = (org.hibernate.lob.SerializableClob)news.getClobnewscontent();
   java.sql.Clob wrapClob = (java.sql.Clob) cb.getWrappedClob();
   if(wrapClob instanceof oracle.sql.CLOB){
    oracle.sql.CLOB clob = (oracle.sql.CLOB) wrapClob;
    java.io.Writer writer = clob.getCharacterOutputStream();
    String contentStr = news.getNewscontent();
    writer.write(news.getNewscontent());
    writer.close();
   }
tx.commit();
session.close();

读取查询:
News news = new News();
news = newsDao.findNewsByID(id);
Clob clob = news.getClobnewscontent();
    String contentStr = "";
    if(clob != null)
    contentStr = clob.getSubString(1, (int)clob.length());
    news.setNewscontent(contentStr);
//news.setNewscontent(HtmlUtils.htmlUnescape(news.getNewscontent()));
return news;

修改:Session session= null;
Transaction tx =null;
try{
session =this.getHibernateTemplate().getSessionFactory().openSession();

news.setClobnewscontent(Hibernate.createClob(" "));

tx=session.beginTransaction();

session.saveOrUpdate(news);
session.flush();

session.refresh(news, LockMode.UPGRADE); 

org.hibernate.lob.SerializableClob cb = (org.hibernate.lob.SerializableClob)news.getClobnewscontent();
   java.sql.Clob wrapClob = (java.sql.Clob) cb.getWrappedClob();
   if(wrapClob instanceof oracle.sql.CLOB){
    oracle.sql.CLOB clob = (oracle.sql.CLOB) wrapClob;
    java.io.Writer writer = clob.getCharacterOutputStream();
    writer.write(news.getNewscontent());
    writer.close();
   }
tx.commit();
session.close();

你可能感兴趣的:(java,oracle,sql,Hibernate,配置管理)