JPA的flush和JDBC Batch在内部是否相同?

时间:2019-11-29 18:39:19

标签: jpa jdbc

根据我的理解,JPA的entitymanager的flush()方法将在单个数据库网络调用中将持久性上下文中可用的数据与数据库同步。因此,当有人尝试保留大量记录时,它避免了多个数据库调用。为什么我不能将其视为JDBC批处理插入的等效批处理(我知道不可以为此目的实现flush())?因为JDBC批处理插入还具有相同的想法,即对添加到语句对象中的所有语句仅进行单个DB调用。

从性能的角度来看,两者具有可比性吗?他们使用相同的技术吗?在内部,在数据库端,两者都会生成相同数量的查询?

请让我理解其中的区别。

1 个答案:

答案 0 :(得分:1)

  

entitymanager将在单个数据库网络调用中将持久性上下文中可用的数据与数据库同步

不,一点也不。那是不可能的。刷新可能会从多个表中删除,插入多个表中并更新多个表。在单个网络呼叫中无法做到这一点。

刷新可以使用批处理语句来执行多个类似的插入或更新。