2011-11-08 4 views
9

Если вы загрузите объект из db и каким-то образом его каким-либо образом измените, будет ли использовать hibernate equals/hashCode для сравнения текущего состояния объекта с его снимком, чтобы определить, нужно ли выполнять обновление sql?Как hibernate использует equals() и hashCode()?

Если у вас есть такие вопросы, у меня есть другой вопрос: если equals вернет true, будет ли спящий режим думать, что сущность не изменилась или попыталась использовать ее по умолчанию (если это так)?

ответ

9

См. Equals and HashCode с сайта сообщества JBoss. Оттуда:

Чтобы избежать этой проблемы, мы рекомендуем использовать «пол» -Уникальную атрибуты вашего постоянного класса для реализации равных() (и хэш-код()). В основном вы должны думать о своем идентификаторе базы данных, поскольку не имеет значения . (Помните, что атрибуты суррогатного идентификатора и в любом случае рекомендуются автоматически создаваемые значения). Идентификатор базы данных должен быть только идентификатором объекта, а в основном должен использоваться только спящим режимом. Конечно, вы также можете использовать идентификатор базы данных в качестве удобного для чтения дескриптора, например. построить ссылки в веб-приложениях.

Другими словами, Hibernate использует equals и hashCode для идентификации, а не для того, чтобы увидеть, был ли объект изменен. Для этого он использует атрибут для сравнения атрибутов.

+1

Не видите доказательства того, что Hibernate действительно использует equals() и hashCode() в этом цикле и на странице – Lu55

3

Не специалист по спящей, но вы можете найти this раздел руководства по просвещению.

Смежные вопросы