繁体   English   中英

Hibernate和并发

[英]Hibernate and Concurrency

我已经阅读了有关并发hibernate文档 ,我认为,我已经了解了可用的锁定方法 ,但我不确定如何实现以下方案。

两个客户端F(快速)和S(慢速)访问数据库并可以修改相同的对象。

现在,还有一个要求:客户端F尽可能快地执行应用程序至关重要。

你会如何解决这个问题?

乐观锁定的问题:假设F尝试更新其更改但无法成功执行此操作,因为S已更新其数据。 将从hibernate抛出异常(StaleObjectStateException)。 我将捕获此异常并合并更改并再次尝试完全相同的事务,对吧? 然后我不喜欢F重试其事务直到它成功的情况,因此F理论上可以阻塞很长时间。 我是否应该忽略这一点并希望这种情况在实践中很少见? 或者我可以给我的客户端像数据库锁定优先级?

其他用户可以忍受这个问题:

StaleObjectStateException(乐观锁定)...我们每10000次调用获得3个例外。

捕获StaleObjectException:s并增加应该更快的线程的优先级。 StaleObjectException:s应该很少见。 如果这不适合您,请查看悲观锁定。

跳出来的第一件事是,如果你要求A + B尽可能快地执行,那么在捕获和处理异常时你将会大幅减速。 这个过程非常缓慢。

我必须阅读你的帖子很多次,才能完全掌握你所说的内容并提供更好的解决方案,但对于初学者,我会立即考虑在这种情况下不使用例外。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM