今天在使用公司的控件上传附件时,提示出错,检查数据库后发现其它字段都没有问题,只有blob的字段不能正常写入,在日志中出现如下错误:
2008-10-15 09:51:57,204 WARN (JDBCExceptionReporter.java:71) - SQL Error: 17090, SQLState: null
2008-10-15 09:51:57,205 ERROR (JDBCExceptionReporter.java:72) - 不允许的操作: streams type cannot be used in batching
2008-10-15 09:51:57,211 ERROR (AbstractFlushingEventListener.java:277) - Could not synchronize database state with session
org.hibernate.exception.GenericJDBCException: could not update: [net.risesoft.components.risefile.RiseFile#{7F000001-FFFF-FFFF-FE32-C2E300000001}]
我首先在自己的机器上把服务跑了一遍,发现没问题,又把服务器上的服务下到本机在试了一遍,还是没问题,所以暂时确定为代码没有问题.
然后,怀疑是包冲突,在百度上搜了一下(在这里我要批评一下了,国内的技术网站大多是跟贴的,找到类似的问题,也没有解决办法),有人说是echace的包和hibernate的包有冲突,我就把echace的包给删掉了,试了一下,呵呵,结果程序运不能运行了,因为hibernate要用到echance的包,没包法又给复制回去了.
最后,我在Google上又搜了一下,终于在hibernate的官方论动上找到了解决办法,将批量更新的参数设置成0就可以了,即
<property name="hibernate.jdbc.batch_size">0</property> .
我下面把贴子的地址贴出来,有同样问题的人可以参考一下,http://forum.hibernate.org/viewtopic.php?t=924665&highlight=oracle+blob