Java Eclipselink/JPA是否将记录保存一次或分别插入每个字段?

Java Eclipselink/JPA是否将记录保存一次或分别插入每个字段?,java,database,jpa,eclipselink,entitymanager,Java,Database,Jpa,Eclipselink,Entitymanager,我有一个关于eclipselink的持久化和合并策略的问题。我想知道eclipselink/JPA如何插入和更新记录。是否将其逐个插入/更新到数据库中?还是将其保存在日志文件中,然后将其刷新到数据库? 这对我来说很重要,因为我将拥有一个带有触发器的历史表,在插入和更新时触发触发器。例如,若每个字段上都有更新,并且有3个字段被更新,那个么历史记录表中会有3条记录,还是只有一条? 我将不胜感激,如果有人回答我,并留下一些参考链接,以进一步了解 持久性提供程序可以在认为合适的时候随时刷新更改。因此,您

我有一个关于eclipselink的持久化和合并策略的问题。我想知道eclipselink/JPA如何插入和更新记录。是否将其逐个插入/更新到数据库中?还是将其保存在日志文件中,然后将其刷新到数据库? 这对我来说很重要,因为我将拥有一个带有触发器的历史表,在插入和更新时触发触发器。例如,若每个字段上都有更新,并且有3个字段被更新,那个么历史记录表中会有3条记录,还是只有一条?
我将不胜感激,如果有人回答我,并留下一些参考链接,以进一步了解

持久性提供程序可以在认为合适的时候随时刷新更改。因此,您无法可靠地预测update回调的数量或预期的SQL语句

通常,提供程序将在每次查询之前刷新更改,以使持久性上下文中的更改对查询可用。您可以提示提供程序将刷新延迟到提交时,但提供程序仍然可以随意刷新

请参阅JPA(2.0)规范的相关章节:

  • §3.2.4与数据库的同步
  • §3.8.7查询和刷新模式
编辑:刷新和事务隔离非常重要。更改将刷新到数据库,并调用生命周期侦听器,但数据不会提交,也不会对其他事务可见-默认为。提交本身是原子的


我不确定服务器崩溃会带来什么后果,但在正常情况下,数据完整性是可以保证的

“持久性提供程序可以随时刷新更改。”这难道不会阻止数据库的原子性规则吗?例如,如果我有3个已更改的字段,则entitymanager尝试更新3次,由于某种原因,我的服务器在一次更新后崩溃并关闭,然后我有一个db的变化,我需要所有3个一起。我错过什么了吗?如果不是的话,这将如何处理?不,原子性很好,您不能依赖生命周期侦听器在每个事务中只触发一次。请看编辑,我想我明白了。事务将在最后提交,所以数据库中的触发器将在提交后触发。Thankshi@kostja我测试了这个场景。我创建了一个包含2列和相应实体的表。我为这两列插入了值,并且在每次插入/更新/删除时都会运行一个触发器,并将日期插入到日志表中。我注意到日志表中执行了一行。我对更新做了同样的操作,得到了同样的结果。所以我的理解是实体值得到更新,但它们还没有发送到db。它们都一起发送,这是有意义的,因为实体管理器之后将没有任何控制权。