Подход clean и независимый от базы данных подход к этой проблеме заключается в том, чтобы сначала проверить, существует ли такой экземпляр, и в зависимости от этого выполнить вставку или обновление в логике вашего приложения.
Тем не менее, может быть способ воспользоваться преимуществами MySQL INSERT ... ON DUPLICATE KEY UPDATE
, описанными здесь здесь . В этом случае вы должны указать собственный оператор SQL INSERT для вашей сущности, как описано в этом связанном вопросе . Но если это работает, зависит от того, как ваши идентификаторы сущности генерируются для начала. Посмотрите эту статью в блоге , касающуюся этой проблемы.
Как правило, вы должны иметь дело со всеми аспектами проблемы, которые Hibernate считает временным экземпляром, который сохраняется, хотя фактически постоянный экземпляр обновляется. Это может быть проблемой с сгенерированными идентификаторами сущностей, другими значениями сгенерированных сущностей, версиями сущностей, параллелизмом, ожидаемым количеством строк вставки / обновления, 2-го уровня и кешем запросов и т. Д.
Итак, я думаю, что было бы неплохо поэкспериментировать с этим, я бы определенно не использовал эту функцию в производственном приложении.