Разные hashCode () в разных контекстах персистентности? - PullRequest
0 голосов
/ 12 октября 2018

Я открываю два разных сеанса в Hibernate, каждый из которых выполняет свою собственную транзакцию.Каждый сеанс извлекает одну и ту же сущность из таблицы.Когда я печатаю их hashCode(), они разные.Почему это происходит?Если мы получим одну и ту же сущность в одном сеансе, то hashCode() будет одинаковым.В чем причина этого.

1 Ответ

0 голосов
/ 12 октября 2018

Если мы получим одну и ту же сущность в том же сеансе, то hashCode () будет таким же.

Ожидается, что это кэш первого уровня Hibernate (здесь Session)сохраняет сущности, загруженные внутри транзакции, в кэш для продолжительности жизни транзакции.
сущность не извлекается второй раз, она просто извлекается из кэша.

Каждый сеанс извлекает одну и ту же сущность изстол.Когда я печатаю их hashCode (), они различаются.

Поскольку загруженные сущности не разделяются между сеансами, это означает, что вы не переопределили hashCode() для сущности.
Таким образом, чтобы гарантироватьтот же hashCode(), а также их равенство (equals()), переопределить equals()/hashCode(), если это имеет смысл.

...