【问题标题】:JPA: EntityManager flush() method behaviourJPA:EntityManager flush() 方法行为
【发布时间】:2016-01-10 05:13:13
【问题描述】:

当我执行以下操作时:

em.persist(entity);
em.getTransaction().commit();

执行第二行后,我可以在跟踪中看到 SQL 插入,在 DB 中插入一行。但是当我这样做时:

em.persist(entity);
em.flush();
em.getTransaction().commit();

在这种情况下,我可以在执行第二行后在跟踪中看到 SQL Insert,但在 DB 中没有插入新行。只有在执行第三行之后才会发生这种情况。

INSERT 不应该在触发后立即在 DB 中放入一行吗?

【问题讨论】:

  • flush 调用在那里毫无意义。提交确实刷新!
  • 我只是在尝试冲洗

标签: jpa entitymanager


【解决方案1】:

是和不是。您的语句是在一个事务中完成的,在事务提交之前,它应该与任何其他会话隔离。一旦事务提交,所有修改都应该对其他会话可见。

【讨论】:

  • 我的代码中有一个会话,没有其他会话。
  • @Chris 的“任何其他会话”不限于 Hibernate 会话,通常是打开的任何数据库会话/连接。此外,即使当时没有其他“会话/连接”打开/活动,即,无论会话/连接打开/活动如何,数据库都有责任确保数据不会被其他事务写入/可见,直到它承诺。这就是为什么在提交完成之前你看不到它的原因。
猜你喜欢
  • 2016-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多