Что означает REFRESH и MERGE в терминах баз данных?

Мне любопытно и нужно быстро найти этот ответ. Google не поможет.

API Java Persistence имеет эти свойства, которые сообщают фреймворку о каскадных операциях над связанными объектами:

CascadeType.PERSIST
CascadeType.DELETE
CascadeType.MERGE
CascadeType.REFRESH

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

Но я не могу понять, что делают другие двое. Помощь?

Ответ 1

REFRESH означает "вытащить любые изменения состояния из базы данных в мое представление". Каскадирование это просто; это означает, что все связанные объекты обновлены.

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

Ссылка на один экземпляр соответствующих документов

Ответ 2

Значение JPA для отношений от многих до многих:

  • ВСЕ - все возможные каскадные операции, выполняемые на исходном объекте, каскадируются до цели ассоциации.
  • MERGE - если исходный объект объединен, слияние каскадируется с целью объединения.
  • PERSIST - если объект-источник сохраняется, то persist будет привязан к цели ассоциации.
  • REFRESH - если исходный объект обновлен, обновление каскадируется до цели ассоциации.
  • УДАЛИТЬ - если исходный объект удален, цель ассоциации также удалена.

Я сам вижу их таким образом (более читаемый):

  • PERSIST создает новые записи из объекта в базе данных.
  • УДАЛИТЬ, удалять.
  • MERGE, для существующих объектов, объединить существующие данные в таблице с данными в моем объекте. (синхронизация с базой данных)
  • REFRESH - обновить данные в объекте. Возможно, в базе данных произошли изменения, которые необходимо синхронизировать. (синхронизация из базы данных)