Что означают REFRESH и MERGE с точки зрения баз данных? - PullRequest
83 голосов
/ 07 мая 2009

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

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

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

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

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

Ответы [ 2 ]

78 голосов
/ 07 мая 2009

JPA Аннотация Значение для отношений «многие ко многим» :

  • ALL - все возможные каскадные операции, выполняемые с исходным объектом, каскадируются к цели ассоциации.
  • MERGE - если исходная сущность объединяется, объединение каскадируется к цели ассоциации.
  • PERSIST - если исходная сущность сохраняется, постоянная сохраняется каскадно к цели ассоциации.
  • REFRESH - если исходный объект обновляется, обновление каскадируется к цели ассоциации.
  • REMOVE - если исходный объект удаляется, цель ассоциации также удаляется.

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...