EntityManager.flush有什么作用,为什么我需要使用它?

2022-08-31 13:38:39

我有一个 EJB,在其中将对象保存到数据库中。在我见过的一个例子中,一旦保存了这些数据(EntityManager.persist),就会调用EntityManager.flush();为什么我需要这样做?我正在保存的对象未附加,并且稍后不会在方法中使用。实际上,一旦保存,该方法就会返回,我希望资源被释放。(示例代码在 remove 调用中也执行此操作。

if (somecondition) {
    entityManager.persist(unAttachedEntity);
} else {
    attachedEntityObject.setId(unAttachedEntity.getId());
}
entityManager.flush();

答案 1

对 的调用将强制数据立即保留在数据库中,就像不会一样(取决于 EntityManager 的配置方式:默认情况下,FlushModeType(AUTO 或 COMMIT)设置为 AUTO,如果设置为 COMMIT,则会自动执行刷新,在提交事务时,数据对基础数据库的持久性将延迟)。EntityManager.flush();EntityManager.persist()


答案 2

EntityManager.persist()使实体持久化,而实际在数据库上运行查询。EntityManager.flush()

因此,当您调用 时,将在数据库中执行用于插入/更新/删除关联实体的查询。此时将已知任何约束失败(列宽、数据类型、外键)。EntityManager.flush()

具体行为取决于刷新模式是自动还是 COMMIT。


推荐