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

请您参考如下方法:

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

所以你应该不是 equals() 中包含 version 属性hashcode()
引用:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/persistent-classes.html#persistent-classes-equalshashcode


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!