«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > ## Когда мне следует использовать «persist()» вместо «merge()» в JPA и Hibernate?

## Когда мне следует использовать «persist()» вместо «merge()» в JPA и Hibernate?

Опубликовано 4 ноября 2024 г.
Просматривать:243

## When Should I Use `persist()` vs. `merge()` in JPA and Hibernate?

Понимание разницы между Persist() и Merge() в JPA и Hibernate

В JPA и Hibernate методы persist() и merge () методы играют решающую роль в управлении сущностями и обеспечении устойчивости данных. Однако они имеют явные различия в поведении.

Persist()

Метод persist(), как определено спецификацией JPA, работает следующим образом:

  • Если объект новый и неуправляемый, он становится управляемым и будет сохранен в базе данных при фиксации или очистке транзакции.
  • Если объект уже находится под управлением или удален, операция игнорируется.
  • Если объект отсоединен, может быть выдано исключение или операция сохранения может завершиться неудачно во время сброса или фиксации.
  • Каскадные операции применяются к любым объектам, на которые ссылаются, с cascade=PERSIST или cascade=ALL аннотации.

Merge()

С другой стороны, метод merge() имеет другой набор семантики:

  • Если объект отсоединен, его состояние копируется в уже существующий управляемый объект с тем же идентификатором или создается новая управляемая копия.
  • Если объект новый , создается новый управляемый объект, и его состояние копируется из входящего объекта.
  • Если объект удаляется, создается исключение.
  • Если объект является управляемым, операция игнорируется , но каскадные операции по-прежнему применяются к объектам, на которые имеются ссылки, если они аннотированы с помощью cascade=MERGE или cascade=ALL.
  • Объединенный объект ссылается на управляемые объекты для всех связей, аннотированных с помощью cascade=MERGE или cascade=ALL.
  • Если сущность объединяется со ссылкой на некаскадную связь, ассоциация из объединенной сущности вернет ссылку на управляемый объект с тем же идентификатором.

Когда использовать Persist() или Merge()

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

  • Используйте persist(), когда захотите. для создания нового или обновления существующего объекта, который еще не управляется контекстом персистентности.
  • Используйте merge(), если вы хотите обновить существующий объект, который уже управляется, но был изменен вне контекста персистентности. .
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3