Java 应用程序崩溃对获取的DB锁的影响

Java 应用程序崩溃对获取的DB锁的影响,java,hibernate,Java,Hibernate,在我的应用程序中,我需要获取一行上的DB锁 我使用的是Hibernate框架,我使用的是LockOptions.UPGRADE。 如果我的应用程序在获得锁后关闭,会发生什么情况 我测试了一个场景,在这个场景中,我在获得锁后突然关闭了应用程序服务器,然后尝试启动一个请求。我发现在应用服务器关闭之前获得的锁对新请求没有影响 这些锁是在Hibernate的缓存中获取的还是在DB级别获取的? 发生这种情况时是否释放了锁?Hibernate不会在内存中锁定。您应该考虑锁定选项。升级< /代码>执行选择…用

在我的应用程序中,我需要获取一行上的DB锁

我使用的是Hibernate框架,我使用的是
LockOptions.UPGRADE
。 如果我的应用程序在获得锁后关闭,会发生什么情况

我测试了一个场景,在这个场景中,我在获得锁后突然关闭了应用程序服务器,然后尝试启动一个请求。我发现在应用服务器关闭之前获得的锁对新请求没有影响

这些锁是在Hibernate的缓存中获取的还是在DB级别获取的?
发生这种情况时是否释放了锁?

Hibernate不会在内存中锁定。您应该考虑<代码>锁定选项。升级< /代码>执行<代码>选择…用于更新,即实际的数据库锁定操作

因此,我认为在客户端“离开”的情况下,如何释放获取的锁在很大程度上取决于实现,但大多数RDBMS都会有一些保持超时和/或其他陈旧连接的检测


干杯,

如果您使用的是RDMS引擎,我想这取决于您使用的是什么RDBMS引擎。Hibernate不会在内存中锁定对象。应用程序可以预期由数据库事务的隔离级别定义的行为

缓存用于在不经常更改(如果有)的表上执行的查询,当然也用于不需要任何锁的只读内容

大多数RDBMS都是基于事务的,或者更具体地说,是“全部还是全部”。如果查询由于任何原因未能成功完成,则不会发生任何事情,并且将释放分配给查询使用的所有资源