что существует два объекта A
и B
где A
содержит отношение OneToMany с B
Я загружаю объект A и повторяю его B
но проблема в том, что когда я вызываю Session.contains(B[0])
он возвращает false
.
в предыдущем сеансе у меня был объект загрузки b (b=B[0])
и в этом сеансе перед загрузкой объекта A
я вызвал b2=Session.merge(b)
и здесь, когда я снова загружаю Object A
, он заполняет поле B
с помощью b
вместо b2
;
знает ли кто-нибудь, почему он заполняет B
буквой b
вместо b2
?
Вероятно, у вас есть Set as your one-to-many collection, и ваш equals/hashCode использует идентификатор базы данных.
Когда вы добавляете элемент в набор, хеш-код используется для размещения лекаря в правом ковше. После того, как вы очистите сеанс, идентификатор назначается, и поэтому hashCode изменяется. Но объект по-прежнему помещается в старый ковш hashCode. Когда вы попытаетесь загрузить его с новым значением hashCode, вы больше не увидите объект.
Для этого вам нужно использовать бизнес-ключ при реализации equals/hashCode в объектах модели домена или использовать этот трюк, если у вас нет бизнес-ключа.