Спящий режим. Должен ли я включать поле "версия" в методы hashcode() и equals()

99
8

Я знаю, что при переопределении hashcode() и equals() моих постоянных объектов я не должен включать идентификатор и включать только содержательные свойства, которые однозначно идентифицируют объект.
Но как насчет поля version, которое используется для оптимистического управления concurrency с помощью Hibernate? Должен ли я пропустить его также, как ID? Что, если скажем new User(name='John', version=1).equals(new User(name='John',version=2)), не будет ли он в любом случае путать Hibernate OCC?

спросил(а) 2011-09-10T20:55:00+04:00 9 лет, 1 месяц назад
1
Решение
80

Рекомендуется использовать equals() и hashCode(), используя равенство Business Key. Равенство бизнес-ключа означает, что метод equals() сравнивает только свойства, которые образуют бизнес-ключ. Это ключ, который идентифицирует наш экземпляр в реальном мире (естественный ключ кандидата)


Итак, вы должны не включать свойство версии в equals() hashcode()

Обратитесь: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/persistent-classes.html#persistent-classes-equalshashcode

ответил(а) 2011-09-12T09:24:00+04:00 9 лет, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема