七郎's JavaBlog

草木竹石皆可為劒。至人之用人若鏡,不將不迎,應而不藏,故能勝物而不傷。
posts - 60, comments - 14, trackbacks - 0, articles - 0

hibernate中clob处理

Posted on 2007-04-16 15:37 七郎归来 阅读(1925) 评论(0)  编辑  收藏

用hibernate封装oracle的clob类型操作起来很不方便,但是新的oracle10g的jdbc驱动,对此有很多改进。

环境 :wodows2000、oracle9.2、oracle10gJDBC驱动(必须)、hibernate3.1.2

oracle官方网站的clob操作方法:http://www.oracle.com/technology/sample_code/tech/java/codesnippet/jdbc/clob10g/ClobManipulationIn10g.java.html

建表脚本:

/*==============================================================*/
/* Table: StoreFile                                             */
/*==============================================================*/
create table StoreFile  (
   uuid                 VARCHAR2(128)                   not null,
   name                 VARCHAR2(200),
   text                 CLOB,
   constraint PK_STOREFILE primary key (uuid)
);

hibernate.cfg.xml:(注意多了个SetBigStringTryClob设置,其它没有什么特殊的了

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"
http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.cglib.use_reflection_optimizer">true</property>
        <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="hibernate.connection.password">java</property>
        <property name="hibernate.connection.url">jdbc:oracle:thin:@10.128.4.69:1521:kf</property>
        <property name="hibernate.connection.username">java</property>
        <property name="hibernate.connection.SetBigStringTryClob">true</property>
        <property name="hibernate.cache.provider_class">org.hibernate.cache.OSCacheProvider</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.format_sql">true</property>
        <property name="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</property>
        <mapping resource="com/study/database/hb/map/File.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

File.hbm.xml文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2006-3-13 17:57:00 by Hibernate Tools 3.1.0.beta4 -->
<hibernate-mapping>
    <class name="com.study.database.hb.map.File" table="StoreFile" batch-size="0">
        <id name="uuid" type="string">
            <column name="UUID" length="128" />
            <generator class="uuid.hex"></generator>
        </id>
        <property name="name" type="string" lazy="false">
            <column name="NAME" length="200"/>
        </property>
        <property name="file" type="string" lazy="false">
            <column name="text" />
        </property>
    </class>
</hibernate-mapping>

File.java文件

package com.study.database.hb.map;
// Generated 2006-3-13 17:57:00 by Hibernate Tools 3.1.0.beta4

import java.sql.Clob;
/**
 * File generated by hbm2java
 */

public class File
    implements java.io.Serializable
{
  // Fields

  private String uuid;
  private String name;
  private String file;
  // Constructors

  /** default constructor */
  public File()
  {
  }
  /** full constructor */
  public File(String name,String file)
  {
    this.name=name;
    this.file=file;
  }
  // Property accessors

  public String getUuid()
  {
    return this.uuid;
  }
  public void setUuid(String uuid)
  {
    this.uuid=uuid;
  }
  public String getName()
  {
    return this.name;
  }
  public void setName(String name)
  {
    this.name=name;
  }
  public String getFile()
  {
    return this.file;
  }
  public void setFile(String file)
  {
    this.file=file;
  }
}
//比以前特殊的地方是hibernate.cfg.xml多了个SetBigStringTryClob设置。

//把clob映射成string类型,这样在多过4000个字符时也不会出错了。操作方法和普通的string类型一样。 


只有注册用户登录后才能发表评论。


网站导航: