0

我收到以下异常

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

4

1 回答 1

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 开始的地方,但您需要检查调用此操作的代码并检查已保存实体的哪些可能值可能导致此问题。

于 2012-11-28T10:01:26.977 回答