昨天做联调时,在10g上测试一点儿问题都没有,但切到9i的库上,却直接报错:
ORA-01461:仅可以为插入 LONG 列的 LONG 值赋值
查找资料后发现,是Oracle9i的一个bug,当Clob字段长度在1000~2000之间时,
就会出现这个错误。
解决方法有两个:
1、替换驱动为神奇的版本ojdbc14-10.2.0.3.0.jar,可以避免这个问题。
2、利用Spring+Hibernate解决这个问题
EventSendInfo.hbm.xml
-<property name="MSG" type="java.lang.String"> +<property name="MSG" type="org.springframework.orm.hibernate3.support.ClobStringType">
applicationContext.xml
... <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> ... +<property name="lobHandler" ref="oracleLobHandler"/> </bean> ... +<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"/> ...