当前位置: 首页 > 知识库问答 >
问题:

尽管flush(),“已分离的实体传递到persistent”

何承
2023-03-14

我有一段很长的JPA+Hibernate代码,它试图在循环中将大量记录插入到DB中。

for (...) {
    ...some selects here...
    ...create new entity object...
    em.persist(entity);
    em.flush();
    em.detach(entity);
}

更奇怪的是,我可以用下面的代码在一次迭代中再现错误。“分离的实体...”第二次刷新时抛出错误。那么这是否意味着第一次同花顺是一个无操作?

em.flush();
em.detach(entity);
em.flush();

共有1个答案

鲜于勇
2023-03-14

flush()将所有更改与数据库同步,例如,如果您修改了一个对象并调用flush(),则将触发更新。注意,您通常不必明确地调用它,因为刷新通常发生在提交事务时。

如果希望减少peristence上下文中的元素数量,则需要调用clear()。这将基本上重置实体管理器

 类似资料:
  • 我有一段运行时间很长的JPA+Hibernate代码,它试图在一个循环中将大量记录插入到DB中。 更奇怪的是,我可以用下面的代码在一次迭代中重现错误。“分离的实体...”第二次刷新时引发错误。那么这是否意味着第一次同花顺是没有操作的呢?

  • 另外,我有一个IOC托管bean,它内部有一个事务方法。 有2个实体具有单向Many2One-- AuModule在上没有引用

  • 我在stackoverflow上读了很多关于相同异常的文章,但没有找到任何实际帮助我的东西,所以我在这里:

  • 我在尝试使用Spring Data JPA和Hibernate作为JPA提供程序执行批插入操作时遇到了问题。 我有以下方法在我的服务。这就是抛出异常的地方。 Institute是一个实例变量,并提前获取。 我还将实体设置为级联、持久和合并。 为什么这段代码起作用 而此代码不

  • 我得到了“分离的实体传递到持久”,但我不明白,该对象如何能够处于分离状态。 这里首先是一些上下文。 每个用户和角色有两个: 实体--除了名称之外--有几个不应与此问题相关的字段,外字段角色来自其基类: 在应用程序启动时,我希望确保此ApplicationRunner中存在管理员用户: 应用程序在启动时抛出异常并关闭: 我在这里的理解是,在从存储库中检索到之后就处于分离状态。 为何超脱?我假设方法上

  • 我有两个模型,一个用于存储用户详细信息,使用该Id,我试图将用户位置保存在另一个表中,该表使用用户的相同Id作为主键。 为什么我会出现这个错误?坚持是什么意思?我正在使用MySQL数据库(&I)