2016-10-18 75 views
0

我有一個適用於Spring MVC和Hibernate的應用程序。如果單個用戶插入一條記錄,但是如果多個用戶同時插入記錄,則它工作正常。它顯示了這個錯誤「Hibernate:org.hibernate.AssertionFailure:null id in」。我可以觀察到這種情況發生,因爲hibernate對所有記錄的自動主要id genaration可能因爲同一時間而類似。不確定這個,請幫忙。需要一個關鍵的修復。休眠:10個或更多用戶同時插入記錄時發生異常

我爲使用中的代碼

@Transactional 
public Account addAccount(Account acct) { 

     session = sessionFactory.getCurrentSession(); 
     session.save(acct); 
     session.flush(); 
     session.clear(); 
     return acct; 

} 
+0

[org.hibernate.AssertionFailure的可能重複:在進入空ID(不要衝洗會話發生異常後)](http://stackoverflow.com/questions/10855542/org-hibernate-assertionfailure-null-id-in-entry-dont-flush-the-session-after) – Dez

+0

這個問題是完全的不同,我讀過它。在提出我的問題之前 –

+0

發佈映射的實體。如何生成ID? –

回答

0

如果您有併發問題考慮創建這個類:在你的代碼

public AccountConcurrencyUtils { 

    public static synchronized Account addAccount(Account acct, SessionType session) { 
     session = sessionFactory.getCurrentSession(); 
     session.save(acct); 
     session.flush(); 
     session.clear(); 
     return acct; 
    } 

} 

最後:

@Transactional 
public Account addAccount(Account acct) { 
    return AccountConcurrencyUtils.addAccount(acct, session); 
} 

這應該牛玉忠併發性問題,如果您使用Java 7,應該有更好的解決方法,但這應該是 解決您的問題,如果它是關於併發,如果不是,問題可能是其他。

我更新的代碼,把你所使用的會話類型,這應該工作,甚至對老年人的Java版本,如Java 5

+0

這也適用於Java 8 –

+0

非常感謝你是天才。將這項工作在Java 8 –

+0

是的,它會工作 –