【问题标题】:Hibernate: Should I include the 'version' field to hashcode() and equals() methodsHibernate:我是否应该在 hashcode() 和 equals() 方法中包含“版本”字段
【发布时间】:2011-11-14 11:18:07
【问题描述】:

我知道,在覆盖我的持久实体的 hashcode()equals() 时,我不应该包含 ID,而只包含唯一标识对象的有意义的属性。 但是,Hibernate 用于乐观并发控制version 字段呢?我是否也应该跳过它,就像 ID 一样?如果我们说new User(name='John', version=1).equals(new User(name='John',version=2)),它不会混淆Hibernate OCC吗?

【问题讨论】:

    标签: hibernate version hashcode optimistic-locking optimistic-concurrency


    【解决方案1】:

    建议您使用业务键相等来实现equals() 和hashCode()。业务键相等意味着 equals() 方法只比较构成业务键的属性。它是一个可以识别我们在现实世界中的实例的键(自然候选键)

    所以你应该equals()hashcode()中包含版本属性

    参考:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/persistent-classes.html#persistent-classes-equalshashcode

    【讨论】:

    • 是的,我读过。但是由于那里没有提到version 字段并且考虑到它的目的(不同的值意味着不同的对象)我怀疑。但是 Hibernate 建议不要将version 用于应用程序中的任何其他内容。因此,我想得越多,我就越相信version 不应该包含在equals()hashcode() 中。
    猜你喜欢
    • 1970-01-01
    • 2011-11-12
    • 2011-05-22
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 2011-06-13
    相关资源
    最近更新 更多