<property name="notetext" column="NOTETEXT" type="&lt;font color=">
</property>
java 代码
- hibernate映射文件:
- 其中:notetext在数据库中是clob型,它映射的type为org.springframework.orm.hibernate3.support.ClobStringType
- <?xml version="1.0" encoding='UTF-8'?>
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
- <!-- DO NOT EDIT: This is a generated file that is synchronized -->
- <!-- by MyEclipse Hibernate tool integration. -->
- <!-- Created Wed Sep 21 13:14:31 CST 2005 -->
- <hibernate-mapping package="cn.cityyouth.bbs.entity">
- <class name="BbsSendnote" table="BBS_SENDNOTE">
- <id name="noteid" column="NOTEID" type="java.lang.Long">
- <generator class="sequence">
- <param name="sequence">seq_sendnote</param>
- </generator>
- </id>
- <property name="notetext" column="NOTETEXT" type="org.springframework.orm.hibernate3.support.ClobStringType" />
- </class>
- </hibernate-mapping>
- application.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
- "http://www.springframework.org/dtd/spring-beans.dtd">
- <beans>
- <bean id="oracleLobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler">
- <property name="nativeJdbcExtractor"><ref local="nativeJdbcExtractor"/></property>
- </bean>
- <bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor">
- </bean>// 这俩个bean是关键
- <bean id="sessionFactory"
- class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="dataSource">
- <ref bean="dataSource" />
- </property>
- <property name="lobHandler">
- <ref bean="oracleLobHandler" />
- </property>
- <property name="mappingResources">
- <list>
- <value>cn/cityyouth/bbs/entity/BbsSendnote.hbm.xml</value>
- </list>
- </property>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">
- org.hibernate.dialect.Oracle9Dialect
- </prop>
- <prop key="hibernate.show_sql">true</prop>
- <!-- Create/update the database tables automatically when the JVM starts up
- <prop key="hibernate.hbm2ddl.auto">update</prop> -->
- <!-- Turn batching off for better error messages under PostgreSQL
- <prop key="hibernate.jdbc.batch_size">0</prop> -->
- <prop key="hibernate.jdbc.batch_size">15</prop>
- </props>
- </property>
- </bean>
- </beans>
- 通过这样配置你在实体bean里可以把clob字段当作String类型来处理,实体类如下:
- public class BbsSendnote
- implements Serializable
- {
- private Long noteid;
- private String notetext;
- public void setNoteid(Long noteid){
- this.noteid=noteid;
- }
- public Long getNoteid(){
- return this.noteid
- }
- public String getNotetext()
- {
- return notetext;
- }
- public void setNotetext(String notetext)
- {
- this.notetext = notetext;
- }
- }
- 在以后的类中操作clob字段,就和操作Stirng类型字段一样了!
在测试DLOG4J对Oracle数据库(Oracle 9i R2)的支持时候发现,当表中使用大文本字段CLOB的时候,映射时候类型填写为text,程序出现了下面的两个问题: 首先出现的问题是:不允许的操作: streams type cannot be used in batching 该问题的解决办法比较简单,需要修改使用到大文本对象的batch_size值为0,也就是不使用批操作。 修改配置后再次启动DLOG发现的问题是,当写一篇日记时,日记较小时数据插入成功,当日记内容很长的时候数据插入失败。 解决的办法是在CLOB字段的映射条目中增加参数length,例如 <property name="content" type="text" length="100000"/> 如此两个问题得以解决,其他的功能在Oracle数据库中工作一切正常。 另外还有一个应该注意的是size是Oracle的关键字,不要拿它当作字段名,否则报的错误很怪,很难一眼看出来具体问题所在。 Hi.
改用Oracle 10g的驱动就能解决Clob的问题 |