我用SSH开发的。在后台有个super.getHibernateTemplate().save(entity)的操作,这里就是报错发生的地方。
对于entity呢,他的主键类型是Long(对应数据库中为number(19,0))且生成方式是sequence,他有个多对一的关系设置,在配置文件中设置了unsaved-value=“-1”。在set这个entity的时候也曾entity.setId(new Long(-1)).
原来的程序在另外一台机器上(jdk配置为1.4,使用weblogic8,网络数据库)可以完成save的操作,但是本机上(jdk为1.4,使用tomcat5,本机数据库)却出现如题的错误,具体如下:
14:04:03 WARN  [JDBCExceptionReporter] logExceptions (line:71) SQL Error: 1, SQLState: 23000
14:04:03 ERROR [JDBCExceptionReporter] logExceptions (line:72) ORA-00001: 违反唯一约束条件 (QEL.SYS_C002759)14:04:03 ERROR [AbstractFlushingEventListener] performExecutions (line:287) Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:74)

现在两台机器上的程序是一样的,不同在于所用web服务器和数据库链接,成为疑点。或者还有其他方面的原因,希望大家给与指导。测试进行中。

解决方案 »

  1.   

    排除数据库表结构的不同,那就在数据库用户权限上有差异了。这个权限到底是什么呢,不可能是对表的操作权限没有加(前面有对表空间内表的成功操作,比如可查询,可修改和删除及插入),那到底会是什么呢?似乎每次在plsql中查询表时总会弹出“动态执行表不可用,本会话的自动统计被禁止。...”这样的对话框,莫非?查一下便可知。可是相关有用信息没有找到啊。还是跳出这一步,对比一下两个数据库用户的权限差别。