Hibernate Save方法和并发

时间:2016-12-05 08:52:04

标签: java hibernate

我正在使用hibernate,想知道在多个用户请求到来时hibernate是如何处理的。

@Transactional on data layer method。

    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值增加1到db中的内容。我没有关闭调试点。说id = 10 之后,我又打开了一个浏览器firefox并点击了该事务,我将id值增加了1,这是我在调试时使用chrome浏览器得到的。说id = 11

下一个场景。 我重新启动了服务器。 再次继续上述步骤,我每次都会增加一个值。说id 12。

所以它非常好的hibernate正在以这种方式工作以避免问题。 我已经通过谷歌论坛了解它的工作原理,但没有得到它。是hibernate如何在内部处理ACID。 有人可以帮助我理解它。只是好奇才知道。

1 个答案:

答案 0 :(得分:0)

以这种方式工作的自动增量ID(和序列)。如果事务稍后中止,则不会回滚其值。至少在默认情况下。