日期:2014-05-16  浏览次数:20417 次

hibernate使用之:处理clob类型
参见原文:http://wangrui.iteye.com/blog/178924。
我的处理方法如下:
一、Model中的数据成员类型为String,映射的数据库字段类型为org.springframework.orm.hibernate.support.ClobStringType

/**
* 电影信息Model
*/
@Entity
@Table(name = "BK_CTT_MOVIE")
@SuppressWarnings("serial")
public class MovieModel extends BaseModel implements Serializable {
    @Id
    private long id;
    @Column(name = "STARS")
    @Type(type="org.springframework.orm.hibernate3.support.ClobStringType")
    private String stars;

    ....get/set方法
}

二、如果使用spring的这个clob类型就需要在applicationContext.xml中的sessionFactory里修改如下配置

  <bean id="oracleLobHandler"   
     class="org.springframework.jdbc.support.lob.OracleLobHandler"   
      lazy-init="true">    
     <property name="nativeJdbcExtractor" ref="nativeJdbcExtractor" /> 
  </bean>
 
  <bean id="nativeJdbcExtractor"   
class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor" 
      lazy-init="true" />

  <!--  ADD PERSISTENCE SUPPORT HERE (jpa, hibernate, etc)  -->
  <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
    <property name="hibernateProperties">
      <value>
                hibernate.dialect=${hibernate.dialect}
                hibernate.query.substitutions=true 'Y', false 'N'
                hibernate.show_sql=true
                hibernate.cache.use_second_level_cache=true
                hibernate.cache.use_query_cache=true
                hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
                hibernate.jdbc.batch_size=50
                hibernate.jdbc.use_streams_for_binary=true
            </value>
            <!--  Turn batching off for better error messages under PostgreSQL  -->
            <!--  hibernate.jdbc.batch_size=0  -->
    </property>
    <property name="lobHandler" ref="oracleLobHandler" />
  </bean>

三、第三步没有修改为使用oci10,依然使用jdbc:oracle:thin连接方式。使用noticeManager.save(notice); 
即可以正常保存的。