何时使用Nhibernate <version>?</version>

时间:2011-09-27 20:56:37

标签: nhibernate

我正在看ayende博客http://ayende.com/blog/3946/nhibernate-mapping-concurrency关于NHibernate的并发性,我还不太清楚何时使用。看起来它是解决StaleObjectException的解决方案。

任何人都可以向我解释你会使用什么情况以及为什么?

感谢。

1 个答案:

答案 0 :(得分:13)

当您要实现Version时,会使用

NHibernate Optimistic concurrency control。如果没有启用乐观并发控制并锁定您的应用程序将使用“上次提交获胜”策略。如果两个事务在大致相同的时间修改同一个对象,则您的用户可能会遇到丢失的更新。更合适的策略称为“First commit wins”。在这种情况下,第二个事务将失败,并显示一个错误,例如:某人已经提交 修改您即将提交的数据。你一直在使用陈旧的 数据。请使用最新数据重新开始对话。

来自Java Persistence with Hibernate

  

Hibernate提供自动版本控制。每个实体实例都有一个   版本,可以是数字或时间戳。 Hibernate增加一个   修改对象的版本,自动比较版本,   如果检测到冲突,则抛出异常。因此,你   将此版本属性添加到所有持久性实体类中   启用乐观锁定。 ...版本号只是一个计数器值 - 它没有任何有用的语义   值。 Hibernate应用程序使用实体表上的附加列。   请记住,访问同一数据库的所有其他应用程序都可以   (也可能应该)也实现乐观版本并使用相同的版本   版本栏。