Что на самом деле делает CascadeType.REFRESH? - PullRequest
75 голосов
/ 10 сентября 2009

Что на самом деле делает CascadeType.REFRESH?

Определение для него:

Когда мы обновляем объект, все объекты, содержащиеся в этом поле, тоже обновляются

, но что это означает на практике?Может ли кто-нибудь дать мне простой пример?

Ответы [ 2 ]

110 голосов
/ 10 сентября 2009

Отдельные описания CascadeType могут быть немного запутанными, но есть простой способ понять это из общего случая.

Для любого из значений CascadeType это означает, что если операция X вызывается для экземпляра, использующего интерфейс EntityManager, и этот экземпляр имеет ссылки на другие экземпляры сущности, и для этой ассоциации определено CascadeType.X затем операция EntityManager также будет применена к этому ассоциированному объекту.

То есть EntityManager.refresh() определяется как:

Обновить состояние экземпляра с внесение изменений в базу данных субъекту, если таковой имеется.

Таким образом, если у сущности A есть ссылка на сущность B, и эта ссылка помечена @CascadeType.REFRESH, и вызывается EntityManager.refresh(A), то неявно также вызывается EntityManager.refresh(B).

6 голосов
/ 26 ноября 2014

Поиск по обновлению: Управляемые объекты можно перезагрузить из базы данных с помощью метода обновления:

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

Источник: http://www.objectdb.com/java/jpa/persistence/retrieve

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