无需更改就可以在受管实体上调用merge方法更新基础数据库吗?

时间:2019-07-04 21:46:59

标签: jpa merge derby

// 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,如何确定数据库已执行更新语句?

编辑:添加了“德比”标签。

2 个答案:

答案 0 :(得分:1)

“如何确定数据库已执行更新语句?” 您可以启用sql日志记录并在日志中查看执行了哪些sql查询。     How to view the SQL queries issued by JPA?

答案 1 :(得分:0)

  1. 根据日志记录,持久性提供程序不会发出更新语句。
  2. 这可能是针对JPA实施的。