Що насправді робить CascadeType.REFRESH?


82

Що означає CascadeType.REFRESH насправді робить?

Визначення для нього є

Коли ми оновлюємо сутність, усі сутності, що містяться в цьому полі, також оновлюються

але що це означає на практиці? Хтось може дати мені простий приклад?

Відповіді:


119

Окремі описи CascadeType можуть трохи заплутати, але існує простий спосіб зрозуміти це із загального випадку.

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

Так EntityManager.refresh()визначається як:

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

Отже, якщо сутність A має посилання на сутність B, і це посилання коментується @CascadeType.REFRESHта EntityManager.refresh(A)викликається, тоді EntityManager.refresh(B)неявно також називається.


Я знаю, що це стара публікація, але, використовуючи приклад A та B вище, якщо екземпляр B наразі відокремлений, чи CascadeType.PERSIST призведе до того, що B стане стійким? Я використовую реалізацію JPA Hibernate.
Енді,

4
Відповів на власне запитання. Відповідь - ні. Ви повинні викликати Save на об’єкті, щоб він став стійким.
Енді,

Що станеться, якщо я об’єднаю об’єкт, який знаходиться у стійкому стані?
abhijeet pathak

9

Отримання за допомогою оновлення: керовані об’єкти можна перезавантажити з бази даних за допомогою методу оновлення:

Вміст керованого об'єкта в пам'яті відкидається (включаючи зміни, якщо такі є) і замінюється даними, які отримуються з бази даних. Це може бути корисним для забезпечення того, щоб програма працювала з найновішою версією об'єкта сутності, на випадок, якщо вона може бути змінена іншим EntityManager з моменту отримання.

Джерело: http://www.objectdb.com/java/jpa/persistence/retrieve

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.