Будет ли вызов метода слияния для управляемого объекта без изменений обновлять базовую базу данных? - PullRequest
0 голосов
/ 05 июля 2019
// pm is a product manager object which handles actual database calls
Product product = pm.findProduct( 1 );
List<Product> products = pm.findAllProducts();
products.stream().forEach( System.out::println );

pm.update( product ); // pm object delegates by calling merge on an entity manager object
products = pm.findAllProducts();
products.stream().forEach( System.out::println );

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

  1. Будет ли поставщик сохраняемости (PP) по-прежнему отправлять его в базу данных для обновления?Укажите оба случая: когда кэш второго уровня используется и не используется.
  2. Если нет, как PP определяет изменения?
  3. Если да, то как нет разницы во втором выводе, какЯ точно знаю, что база данных обновила запись?IOW, как я могу определить, что база данных выполнила оператор обновления?

EDIT: добавлен тег 'derby'.

Ответы [ 2 ]

1 голос
/ 05 июля 2019

"как я могу определить, что база данных выполнила оператор обновления?" Вы можете включить ведение журнала sql и посмотреть в журнале, какие запросы sql выполняются. Как просмотреть SQL-запросы, выданные JPA?

0 голосов
/ 06 июля 2019
  1. Что касается ведения журнала, поставщик сохраняемости не выдает оператор обновления.
  2. Это может зависеть от реализации JPA.
...