Що означає CascadeType.REFRESH
насправді робить?
Визначення для нього є
Коли ми оновлюємо сутність, усі сутності, що містяться в цьому полі, також оновлюються
але що це означає на практиці? Хтось може дати мені простий приклад?
Відповіді:
Окремі описи CascadeType можуть трохи заплутати, але існує простий спосіб зрозуміти це із загального випадку.
Для будь-якого зі CascadeType
значень це означає, що якщо операція X
викликається на екземплярі за допомогою EntityManager
інтерфейсу, і цей екземпляр має посилання на інші екземпляри сутності, і це асоціювання CascadeType.X
визначено, тоді EntityManager
операція також буде застосована до цієї асоційованої сутності.
Так EntityManager.refresh()
визначається як:
Оновіть стан екземпляра з бази даних, перезаписавши зміни, внесені в сутність, якщо такі є.
Отже, якщо сутність A має посилання на сутність B, і це посилання коментується @CascadeType.REFRESH
та EntityManager.refresh(A)
викликається, тоді EntityManager.refresh(B)
неявно також називається.
Отримання за допомогою оновлення: керовані об’єкти можна перезавантажити з бази даних за допомогою методу оновлення:
Вміст керованого об'єкта в пам'яті відкидається (включаючи зміни, якщо такі є) і замінюється даними, які отримуються з бази даних. Це може бути корисним для забезпечення того, щоб програма працювала з найновішою версією об'єкта сутності, на випадок, якщо вона може бути змінена іншим EntityManager з моменту отримання.
Джерело: http://www.objectdb.com/java/jpa/persistence/retrieve