2016-12-05 50 views
2

我在使用hibernate,想知道hibernate在處理多個用戶請求時如何處理。Hibernate保存方法和併發

@Transactional on數據層方法。

User user = new User(); 
    user.setCreatedBy("TestSad"); 
    user.setUsername("TestSadd"); 
    Integer id = (Integer) this.sessionFactory.getCurrentSession().save(user); 
    // put the debug point here 
    int i = 1; 
    if(i ==1){ 
     // intentionally i was throwing exception as i dont want to save 
     throw new NumberFormatException(); 
    } 

對於我的測試中,我已經打開一個瀏覽器Chrome和打我得到的值加一,什麼是目前在分貝ID交易。我沒有關閉調試點。說id = 10 之後,我已經打開了另一個瀏覽器的Firefox和擊中事務我得到的ID值增加了我在調試過程中使用鉻瀏覽器。 say id = 11

下一個場景。 我已重新啓動服務器。 再次繼續上面的步驟,我得到的值每增加一。說ID 12.

因此,它的真正好的休眠正在這樣工作,以避免問題。 我已經通過谷歌論壇瞭解它如何工作,但沒有得到它。 hibernate是如何在內部處理ACID的? 有人可以幫助我理解它。只是好奇知道。

+1

請參考下面的答案。 http://stackoverflow.com/questions/3616321/concurrent-updates-handling-in-hibernate –

+0

或者可能檢查此[答案](http://stackoverflow.com/questions/22030448/is-sessionfactory-getcurrentsession-thread-安全/ 22030598#22030598)。 – AntJavaDev

回答

0

以這種方式工作的自動遞增ID(和序列)。如果事務稍後中止,它的值不會回滾。至少默認情況下。