Что делает CascadeType.REFRESH?

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

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

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

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

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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