Объединение JPA против сохранения

До сих пор я предпочитал всегда использовать EntityManager merge() для обеспечения как вставки, так и обновления. Но я также заметил, что merge выполняет дополнительные запросы выбора перед обновлением/вставкой, чтобы гарантировать, что запись еще не существует в базе данных.

Теперь я работаю над проектом, требующим обширных (объемных) вставок в базу данных. С точки зрения производительности имеет смысл использовать persist вместо merge в сценарии, где я абсолютно уверен, что я всегда создаю новый экземпляр объектов, которые нужно сохранить?

Ответ 1

Не рекомендуется использовать merge, когда persist хватает - merge выполняет гораздо больше работы. Ранее обсуждалась тема fooobar.com/questions/11717/..., а в этой статье подробно объясняется различия, с некоторыми красивыми диаграммами потоков, чтобы все было ясно.

Ответ 2

Я бы определенно пошел с persist persist(), если, как вы сказали:

(...) Я абсолютно знаю, что я всегда создаю новый экземпляр объектов, которые нужно сохранить (...)

Что это за метод - он защитит вас в тех случаях, когда Сущность уже существует (и откажется от вашей транзакции).