Объединение JPA против сохранения
До сих пор я предпочитал всегда использовать EntityManager merge()
для обеспечения как вставки, так и обновления. Но я также заметил, что merge выполняет дополнительные запросы выбора перед обновлением/вставкой, чтобы гарантировать, что запись еще не существует в базе данных.
Теперь я работаю над проектом, требующим обширных (объемных) вставок в базу данных. С точки зрения производительности имеет смысл использовать persist вместо merge в сценарии, где я абсолютно уверен, что я всегда создаю новый экземпляр объектов, которые нужно сохранить?
Ответы
Ответ 1
Не рекомендуется использовать merge
, когда persist
хватает - merge
выполняет гораздо больше работы. Ранее обсуждалась тема fooobar.com/questions/11717/..., а в этой статье подробно объясняется различия, с некоторыми красивыми диаграммами потоков, чтобы все было ясно.
Ответ 2
Я бы определенно пошел с persist persist()
, если, как вы сказали:
(...) Я абсолютно знаю, что я всегда создаю новый экземпляр объектов, которые нужно сохранить (...)
Что это за метод - он защитит вас в тех случаях, когда Сущность уже существует (и откажется от вашей транзакции).