mysql - Hibernate 乐观锁定..它是如何工作的?

标签 mysql database nhibernate hibernate

我正在阅读以下有关 hibernate 乐观锁定的博客。我打算将它与 hibernate 一起使用。但是,我有一个担忧。我们有java代码和c++代码,都连接到一个数据库。同时,java代码可以使用hibernate实现乐观锁,我想让c++代码做同样的事情。此外,C++ 代码使用了一些遗留代码。

http://turgaykivrak.wordpress.com/2009/05/16/72/

有文档解释hibernate是如何实现乐观锁的吗?

如有任何建议,我们将不胜感激。

谢谢
巴拉

最佳答案

准确的说,你说的不是乐观锁,而是乐观并发(没有锁)。 对版本使用时间戳只是为了支持遗留数据库,因为现代数据库(至少在理论上)可以比存储时间戳的准确性更快地工作。

使用整数版本属性非常简单:

  • 插入时:将版本设置为 1
  • 关于更新和删除:将版本增加 1 并将“where version=@version”附加到每个 sql 语句。返回更改的记录数。当更改的记录数与预期不同时,抛出 StaleObjectStateException。

就个人而言,我不会在非遗留情况下创建两个单独的应用程序来写入相同的数据,因为这意味着必须复制业务逻辑并且必须将更改应用于两个应用程序,而且当更改与只有一个应用程序。

关于mysql - Hibernate 乐观锁定..它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3347546/

相关文章:

mysql - 将巨大的 XML 文件导入 MySQL

mysql - 如何减少 MySQL 中输入字符串/varchar 中的字符数

php - 使用 Travis CI 触发测试时无法访问 CakePHP fixture db

c# - NHibernate 将实体映射到通用查找表

mysql - 从几天后状态仍然相同的表中获取这些行?

database - 我在哪里可以下载可以用作数据仓库的示例数据库?

python - 如何使用 Django ORM 排除列的多个值?

NHibernate 配置问题

linq - 防止在生成的 sql 代码的计数查询中进行不必要的交叉连接

php - 需要一种方法来呈现对象的先决条件