Session.contains возвращает false для объекта, который загружается отношением OneToMany

1

что существует два объекта 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?

Теги:
hibernate
orm
session
hibernate-mapping

1 ответ

3

Вероятно, у вас есть Set as your one-to-many collection, и ваш equals/hashCode использует идентификатор базы данных.

Когда вы добавляете элемент в набор, хеш-код используется для размещения лекаря в правом ковше. После того, как вы очистите сеанс, идентификатор назначается, и поэтому hashCode изменяется. Но объект по-прежнему помещается в старый ковш hashCode. Когда вы попытаетесь загрузить его с новым значением hashCode, вы больше не увидите объект.

Для этого вам нужно использовать бизнес-ключ при реализации equals/hashCode в объектах модели домена или использовать этот трюк, если у вас нет бизнес-ключа.

  • 0
    У меня есть ArrayList в качестве моей коллекции OneToMany
  • 0
    Используете ли вы сущность для реализации equals и hashcode?
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню