我收到以下异常
org.hibernate.util.JDBCExceptionReporter - SQL Error: 1, SQLState: 23000
org.hibernate.util.JDBCExceptionReporter - ORA-00001: unique constraint (DBNAME.ConstraintName) violated
org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
在session.flush()
中指出了错误请帮助我
我正在使用带有休眠的spring webflow
答案 0 :(得分:0)
异常明确指出您违反了给定列的唯一约束,这意味着您在2条记录中插入相同的值,这些记录受架构限制。
每个RDBMS都有办法显示您的约束,至少通过DB Dump来实现。或者他们可能有一些额外的语法,比如MySQL,你会写show create table TABLE_NAME
。我不知道Oracle中的确切语法。
另外,你需要给你的约束赋予有意义的名字,我希望DBNAME.ConstraintName
是你为了举例而改变的,而不是你真正的约束名。在hbm.xml文件中,您可以为简单属性设置unique="true" unique-key="meaningfull_uk"
,以便了解实际约束失败的原因(您必须重新运行hbm2ddl才能使用新名称重新创建它)。
此外,Session#flush
是Hibernate启动的地方,但您需要检查调用此操作的代码,并检查保存实体的可能值可能导致此问题。