早上好,我在一个表中有一个列,该列在我获得的服务图层的success.In上递增
MyDomain myDomain = myDomainDAO.findById(myId);
myDomain.setValue(myDomain.getValue()+1);
myDAO.saveorupdate(myDomain);在我的例子中,二级缓存被关闭了。当多个线程调用递增该值时,结果不一致。这可能会发生,因为hibernate线程将随机生成sql并随机执行。我用HQL解决了这个问题。我想知道如何通过上面的代码实现这一点。假设我的二级缓存关闭了,那么无论如何都无法知道数据库中的最后一个保存值。非常感谢
发布于 2011-12-10 07:57:18
你可能会读到事务隔离,据我所知,这是一个关于事务的关键概念,可以在不同的级别上设置(你可以在你的数据库配置,你的应用服务器和Spring Transactionnal注解中设置它,但我不知道确切的规则来保证哪个级别将被应用)。http://static.springsource.org/spring/docs/1.2.9/api/org/springframework/transaction/annotation/Isolation.html
顺便说一句,在并发环境中,如果您只想增加一个计数器,那么您必须知道事务隔离对性能有影响。使用@Transactionnal(Isolation.SERIALIZABLE)将保证一致性,但它可能会像在您的dao增量方法中放置一个同步块一样快……我不是专家,请您自己弄清楚:)
https://stackoverflow.com/questions/8444586
复制相似问题