一些令人困惑的解释:flush();刷新是将底层持久存储与内存中的可持久状态同步的过程。它将在运行事务中更新或插入到您的表中,但可能不会提交这些更改。
如果更改无论如何都将在提交后才被持久化到数据库中,那么为什么要在代码中间刷新呢?
如果在运行刷新后对托管对象进行任何更改,那么是否会引发异常,还是这些更改将被同步并且然后得到持久化。如果它们被同步了,那么为什么要首先刷新呢?
一些令人困惑的解释:flush();刷新是将底层持久存储与内存中的可持久状态同步的过程。它将在运行事务中更新或插入到您的表中,但可能不会提交这些更改。
如果更改无论如何都将在提交后才被持久化到数据库中,那么为什么要在代码中间刷新呢?
如果在运行刷新后对托管对象进行任何更改,那么是否会引发异常,还是这些更改将被同步并且然后得到持久化。如果它们被同步了,那么为什么要首先刷新呢?
要使用乐观锁,您需要实现它。在此处阅读有关 @Version
注释的信息: https://blogs.oracle.com/carolmcdonald/entry/jpa_2_0_concurrency_and。如果没有实现它,您的实体将不使用乐观锁定并且“最后一次更新”会胜出。
当事务提交时,实体管理器会为您执行刷新操作。在某些情况下,例如在容器管理的事务中处理乐观锁定时,您可能需要手动调用flush方法以捕获和处理特定的锁定异常。
shared-cache-mode
设置为NONE
。 - owenrbentityManagerInstance.persist(entity1);
entityManagerInstance.flush();
entity2.setForeignKeyToEntity1(entity1.getId());
entity2.create();