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 ダンプを持つことによって、制約を示す手段があります。または、MySQL の場合のように、追加の構文がある場合もありますshow create table TABLE_NAME。Oracle の正確な構文はわかりません。

また、制約に意味のある名前を付ける必要がありますDBNAME.ConstraintName。例のために変更したものであり、実際の制約名ではないことを願っています。hbm.xml ファイルではunique="true" unique-key="meaningfull_uk"、単純なプロパティを設定して、実際に失敗した制約を知ることができます (新しい名前で再作成するには、hbm2ddl を再実行する必要があります)。

また、Session#flushHibernate が開始される場所ですが、この操作を呼び出すコードを検査し、保存されたエンティティのどのような値がこの問題を引き起こす可能性があるかを確認する必要があります。

于 2012-11-28T10:01:26.977 に答える