удалите объект из сессии в, в спящем режиме? [дубликат]

Возможный дубликат:
Spring + В спящем режиме: другой объект с тем же значением идентификатора был уже связан с сессией

Я загрузился, объект X от DB с помощью hibernateTemplate находят идентификатором, затем я получаю некоторые атрибуты от того объекта и добавил его к другому объекту Y от того же типа, который был также загружен теми же X идентификаторами. Затем, когда я пытался saveOrUpdate возразите Y, будьте в спящем режиме, выдает исключение, другой объект с тем же значением идентификатора был уже связан с сессией, которая я думаю средства, которые возражают X, связан с тем атрибутом на той же сессии, таким образом, Y не может быть сохранен или обновлен и влиять также на тот атрибут.

Как я могу удалить объект X из сессии, таким образом, это больше не связывается с тем атрибутом

Я пытался использовать слияние вместо saveOrUpdate и это хорошо работает, но является этим то же как saveOrUpdate? Я подразумеваю, что могу зависеть от него, чтобы добавить новые записи или обновить их?

1
задан Community 23 May 2017 в 12:01
поделиться

2 ответа

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

if (X.getId() != null) {
    return hibernateTemplate.merge(X);
} else {
    hibernateTemplate.saveOrUpdate(X);
}

Итак, если это был новый экземпляр для сеанса, это будет сделано с помощью saveOrUpdate , и если это дублированный экземпляр для тех же строк это будет обрабатываться с помощью слияния.

2
ответ дан 2 September 2019 в 22:55
поделиться

Возможно, вы можете попробовать session.evict ().

0
ответ дан 2 September 2019 в 22:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: