2012-11-20 52 views
0

我收到以下異常Hibernate + Spring無法與會話

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()

同步數據庫狀態好心幫我

我使用彈簧webflow與休眠

+0

你如何設置你的實體主鍵?你的@GeneratedValue註釋的值是多少? –

+0

不,我是在hibernate config xmls中設置值,沒有註釋 – user1287569

+0

好的,你怎麼指定你的密鑰,序列,標識符? –

回答

0

例外清楚地表明,您違反了給定列的唯一約束,這意味着您將插入相同的值2 re由您的模式限制的線。

每個RDBMS都有辦法顯示你的約束,至少通過數據庫轉儲。或者他們可能有一些額外的語法,比如在MySQL中你會寫show create table TABLE_NAME。我不知道Oracle中的確切語法。

此外,你需要給你的約束有意義的名字,我希望DBNAME.ConstraintName是你爲了例子而改變的,它不是你真正的約束名稱。在hbm.xml文件中,您可以爲簡單屬性設置unique="true" unique-key="meaningfull_uk",以便知道實際約束失敗的情況(您必須重新運行hbm2ddl以重新創建新名稱)。

另外,Session#flush是Hibernate啓動的地方,但您需要檢查調用此操作的代碼並檢查保存的實體的可能值是否會導致此問題。

相關問題