我想通过1使用Hibernate来增加在数据库表中的字段。休眠:增加一个整型字段
我可以通过简单地加载一个对象,增加值和更新但对象如果另一个线程来临时,在负载和更新则该值将损坏之间更新的领域做到这一点。
所以不是我呼吁直接对数据库进行更新:
Query updateHits = createQuery(
"UPDATE Job SET hitCount = hitCount + 1 WHERE id = :jobId");
updateHits.setInteger("jobId", job.getId());
updateHits.executeUpdate();
但我的理解是,这绕过数据库中的乐观锁定和我目前SQL服务器遇到问题死锁,我相信这是罪魁祸首。
有没有办法来增加一个字段,而不直接调用和更新,同时保持数据的完整性?
可能想检查您的锁是如何创建的。如果你正在为该更新获取表锁,则会出现问题。如果你得到一个行锁我不明白怎么回事造成死锁。 – BlackICE 2011-03-25 11:51:10
我实际上设法解决死锁问题,只是确保此更新是在事务内运行的最后一条语句。不过,我仍然很想知道更好的解决方案。 – 3urdoch 2011-03-25 12:17:52
您的“逐查询增量”解决方案比处理悲观锁定要好十倍,尤其是在您正在处理多线程和长时间运行的事务时 – kommradHomer 2014-10-28 16:10:25