gpt4 book ai didi

sql-server - Hibernate:增加整数字段

转载 作者:行者123 更新时间:2023-12-02 10:26:43 25 4
gpt4 key购买 nike

我想使用 Hibernate 将数据库表中的字段加 1。

我可以通过简单地加载一个对象、增加值并更新对象来做到这一点,但是如果另一个线程出现并在加载和更新之间更新字段,那么该值将被损坏。

因此,我直接在数据库上调用更新:

Query updateHits = createQuery(
"UPDATE Job SET hitCount = hitCount + 1 WHERE id = :jobId" );
updateHits.setInteger( "jobId", job.getId() );
updateHits.executeUpdate();

但是我的理解是,这绕过了数据库中的乐观锁定,并且我目前在 SQL Server 中遇到了死锁问题,我相信这是罪魁祸首。

有没有一种方法可以在不直接调用更新的情况下增加字段并同时保持数据完整性?

最佳答案

I can do this by simply loading an object, incrementing the value and updating the object however if another thread comes along and updates the field in between the load and the update then the value will become corrupted.

如果第二个线程也在使用 hibernate,并且您正在使用 hibernate 版本控制 (@Version),则第一个提交并更改对象的线程将在对象上设置新版本。

当第二个线程提交进来时,hibernate 将检查乐观锁是否失败,并抛出一个异常 - 如果我没有记错的话,会抛出 StaleObjectException 。如果您的并发代码周围有一个 catch block ,您将有机会再次加载该对象并尝试更新(如果有意义)。如果您使用 JPA,将会抛出 OptimisticLockException。

Hibernate Optimistic Concurrency Control Section 有大量信息.

干杯!

关于sql-server - Hibernate:增加整数字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5431508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com