最近需要在项目中使用lob字段,所使用的数据库是Oracle 9i,spring applicationContext.xml配置如下:
<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor" lazy-init="true"/> <bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true"> <property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"/> </bean>
在sessionFactory配置中加入如下属性:
<property name="lobHandler" ref="lobHandler"/>
在hibernate.hbm.xml中,对于clob字段使用org.springframework.orm.hibernate3.support.ClobStringType,对于blob字段使用org.springframework.orm.hibernate3.support.BlobByteArrayType。
以上配置后,需要对处理lob字段的方法加上事务,使用spring声明式事务即可。
这也是网上介绍最多的方法,但是一开始按照这么做抛出了异常,反复调试不果,最近升级了一下Oracle9i的驱动,问题得以解决。原来不成功的原因是驱动程序版本较低,原来使用的版本是9.2.0.1.0自带的JDBC驱动,现在升级到新的Oracle9i 9.2.0.8 JDBC Drivers,终于可以正确的操作lob字段(可运行的驱动见附件)。