应用程序崩溃对获取的数据库锁的影响

时间:2015-05-20 11:08:45

标签: java hibernate

在我的应用程序中,我需要连续获取数据库锁。

我正在使用Hibernate Framework,我使用LockOptions.UPGRADE。 如果我的应用程序在获得锁定后关闭会发生什么?

我已经测试了一个场景,在我获得锁定后突然关闭我的应用程序服务器然后尝试发起请求。我发现在关闭应用程序服务器之前获取的新请求没有任何影响。

Hibernate在其缓存或数据库级别获取锁定? 发生这种情况时锁是否被释放?

2 个答案:

答案 0 :(得分:0)

Hibernate不会锁定内存。您应该将LockOptions.UPGRADE视为执行SELECT ... FOR UPDATE,即。实际的数据库锁定操作。

因此,我希望如果你的客户端“消失”,它的实现依赖于如何释放获取的锁,但大多数RDBMS' 会有一些keepalive超时和/或其他检测过时的连接。

干杯,

答案 1 :(得分:0)

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

缓存用于对不经常更改的表格(如果有的话)进行查询,当然,还用于只读不需要任何锁定的内容。

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