在hibernate中使用Spring的多线程更新

时间:2011-12-09 11:08:19

标签: hibernate spring

早上好, 我在表中有一列成功递增。在我的服务层我有

MyDomain myDomain = myDomainDAO.findById(myId);
myDomain.setValue(myDomain.getValue()+1); 
myDAO.saveorupdate(myDomain);
在我的情况下,

二级缓存已关闭。当多个线程调用以递增值时,结果不一致。这可能发生,因为hibernate线程将随机生成sql并随机执行。 我用HQL解决了这个问题。我想知道如何通过上面的代码实现这一点。鉴于我的二级缓存已关闭,无论如何都要知道数据库中的最后一个保存值。 非常感谢

1 个答案:

答案 0 :(得分:1)

你可能会读到有关事务隔离的信息,这是关于可以在不同级别设置的事务的关键概念,据我所知(你可以在db配置,app服务器和Spring Transactionnal注释中设置它但是我不要我们确切地知道保证应用哪个级别的规则。 http://static.springsource.org/spring/docs/1.2.9/api/org/springframework/transaction/annotation/Isolation.html

如果你只是想增加一个计数器,你必须知道事务隔离会对性能产生影响。使用@Transactionnal(Isolation.SERIALIZABLE)将保证一致性,但也许它会像在你的dao递增方法中放置一个同步块一样快......我不是专家,自己弄明白:)