Oracle的lob字段本身拥有一个游标,JDBC必须通过游标对lob字段进行操作,在lob字段创建之前,我们无法获得其游标句柄,这也就意味着,我们必须首先创建一个空lob字段,再从这个空lob字段获得游标,写入我们所期望保存的数据。如果是用spring操作就会简单很多,配置如下:
<!--
用spring提供的CommonsDbcpNativeJdbcExtractor来处理Oracle9i lob类型的特殊声明:
-->
< 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 bean ="nativeJdbcExtractor" />
</ property >
</ bean >
< 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 bean ="nativeJdbcExtractor" />
</ property >
</ bean >
然后在org.springframework.orm.hibernate3.LocalSessionFactoryBean中加入:
<!--
为处理lob类型字段的句柄声明
-->
< property name ="lobHandler" ref ="lobHandler" />
< property name ="lobHandler" ref ="lobHandler" />
最后在.hbm.xml中对lob字段加入:
type="org.springframework.orm.hibernate3.support.BlobByteArrayType"