Возможный дубликат:
Spring + В спящем режиме: другой объект с тем же значением идентификатора был уже связан с сессиейЯ загрузился, объект X от DB с помощью hibernateTemplate находят идентификатором, затем я получаю некоторые атрибуты от того объекта и добавил его к другому объекту Y от того же типа, который был также загружен теми же X идентификаторами. Затем, когда я пытался
saveOrUpdate
возразите Y, будьте в спящем режиме, выдает исключение, другой объект с тем же значением идентификатора был уже связан с сессией, которая я думаю средства, которые возражают X, связан с тем атрибутом на той же сессии, таким образом, Y не может быть сохранен или обновлен и влиять также на тот атрибут.Как я могу удалить объект X из сессии, таким образом, это больше не связывается с тем атрибутом
Я пытался использовать слияние вместо
saveOrUpdate
и это хорошо работает, но является этим то же какsaveOrUpdate
? Я подразумеваю, что могу зависеть от него, чтобы добавить новые записи или обновить их?
После множества попыток я обнаружил, что использование слияния - лучший способ справиться с этим эффективно, и чтобы позаботиться о сохранении новых экземпляров, я думаю, что лучше всего сделать следующее:
if (X.getId() != null) {
return hibernateTemplate.merge(X);
} else {
hibernateTemplate.saveOrUpdate(X);
}
Итак, если это был новый экземпляр для сеанса, это будет сделано с помощью saveOrUpdate
, и если это дублированный экземпляр для тех же строк это будет обрабатываться с помощью слияния.