Может быть неправильно, но я думаю, отсоединено и new - это два разных состояния в жизненном цикле сущности. Отдельный объект был загружен из базы данных в сеансе, но сеанс был закрыт. Однако в таком случае Hibernate должен знать, что объект уже существует в базе данных, и обновлять значения соответствующим образом, когда объект позднее объединяется. То же не произойдет с объектами, созданными с использованием ключевого слова new , даже если значение @ Id одинаково.
Эта диаграмма ясно показывает, что сущность в состоянии New / Transient-состоянии отличается от Detached (JPA). Здесь Hibernate (3.5) ручной ввод для состояний сущностей. Я также проверил из книг «Сохранение Java с JPA» - и «Сохранение Spring с Hibernate» - оба объясняют состояния сущности и переходы аналогично (отсоединенная сущность должна быть сохранена в / извлечена из базы данных, а затем отсоединена от контекста / сеанса постоянства. стать отстраненным). К сожалению, я не смог найти упоминаний о том, как должно происходить слияние в случае, когда вы создаете новый объект с помощью new и назначаете ему идентификатор вручную, что заставляет меня поверить, что merge не должен использоваться таким образом. Тем не менее, может быть не так.