BLOB/CLOB类型在HIBERNATE中的应用

来源:互联网 发布:java面试宝典2017版pdf 编辑:程序博客网 时间:2024/06/06 04:34

    为什么需要clob/blob对象?
         在实际的项目开发过程当中,有时候需要存取比较大的数据。而在oracle中,varchar2的长度不能够满足需求,因此就得需要用到clob/blob。

    BLOB/CLOB在HIBERNATE中的如何应用?
       
   为了更好的理解,我们举一个文章发布的例子做为讨论。

          实体类(POJO)MessageArticle

          ........................
          private Clob content1;
          private String content;

         public String getContent() {
          return content;
        }

    public void setContent(String content) {
        this.content = content;
    }

    public Clob getContent1() {
        return content1;
    }

    public void setContent1(Clob content1) {
        this.content1 = content1;
    }
    ........................

   配置文件(*.hbm.xml)

   <property name="content1" type="clob">
            <column name="CONTENT"  />
        </property>

   CURD实现(保存和修改):
      String content = request.getParameter("content");
      MessageArticle article1 = new MessageArticle();
      ............................
      Integer articleid = (Integer)getHibernateTemplate().save(article1);

   try {
        MessageArticle article = (MessageArticle)getHibernateTemplate().load(MessageArticle.class, articleid, LockMode.UPGRADE);
        oracle.sql.CLOB clob = (oracle.sql.CLOB) ((SerializableClob)article.getContent1()).getWrappedClob();       
        java.io.Writer pw = clob.getCharacterOutputStream();
        pw.write(content);
        pw.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch(IOException ex){
            ex.printStackTrace();
        }

     //读取
     ........................
    MessageArticle article = (MessageArticle)getHibernateTemplate().load(MessageArticle.class, articleid, LockMode.UPGRADE);
            Clob clob = article.getContent1();
            if (clob != null) {
                String content = clob.getSubString(1, (int) clob.length());
                article.setContent(content);
            }

原创粉丝点击