Когда вы вызываете session.merge()
, он возвращает объект, который является значением этой сущности в контексте текущего сеанса.Вы не можете просто повторно использовать существующий объект в новом сеансе, потому что объект находится за пределами срока его сеанса (и новый объект, представляющий ту же сущность, возможно, уже был создан в новом сеансе).Вы должны соблюдать семантику hibernate для одного экземпляра на сущность на сеанс, используя новый объект вместо старого.
Если вы обнаружите, что вызов merge()
приводит к созданию новой сущности (оператор вставки генерируется при сбрасывании), это может означать, что идентификатор объекта, который вы пытаетесь объединить, не совпадает, или есть проблема с вашей реализацией equals()
или hashCode()
.