在我的应用程序中,我需要连续获取数据库锁。
我正在使用Hibernate Framework,我使用LockOptions.UPGRADE
。
如果我的应用程序在获得锁定后关闭会发生什么?
我已经测试了一个场景,在我获得锁定后突然关闭我的应用程序服务器然后尝试发起请求。我发现在关闭应用程序服务器之前获取的新请求没有任何影响。
Hibernate在其缓存或数据库级别获取锁定? 发生这种情况时锁是否被释放?
答案 0 :(得分:0)
Hibernate不会锁定内存。您应该将LockOptions.UPGRADE
视为执行SELECT ... FOR UPDATE
,即。实际的数据库锁定操作。
因此,我希望如果你的客户端“消失”,它的实现依赖于如何释放获取的锁,但大多数RDBMS' 会有一些keepalive超时和/或其他检测过时的连接。
干杯,
答案 1 :(得分:0)
我想这取决于您使用的RDBMS引擎,如果您正在使用RDMS引擎。 Hibernate不会锁定内存中的对象。您的应用程序可以期望由数据库事务的隔离级别定义的行为。
缓存用于对不经常更改的表格(如果有的话)进行查询,当然,还用于只读不需要任何锁定的内容。
大多数RDBMS都是基于交易的,或者更具体,“全有或全无”。如果查询因任何原因未成功完成,则不会发生任何事情,并且释放所有分配查询使用的资源。