首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我是否应该使用JPA EntityManager.clear()而不是EntityManager.detach()

我是否应该使用JPA EntityManager.clear()而不是EntityManager.detach()
EN

Stack Overflow用户
提问于 2021-10-08 05:37:06
回答 1查看 84关注 0票数 0

我有一个在Hibernate上运行的JPA应用程序。在我的spring服务类(@Service)中,我放置了@Transactional注释。

在某些情况下,我需要暂停或恢复对记录的更改。虽然JPA在默认情况下会在事务结束时自动持久化更改,但我并没有显式触发存储库的save()命令。

我更喜欢使用EntityManager.detach(Object entity)来恢复/停止更改。据我所知,这个分离方法应该只恢复给定实体/ DTO对象上的更改。然而,有时候,这种分离方法似乎并不像预期的那样工作,更改仍然被持久保存到数据库中。

然后我发现了一些关于使用EntityManager.clear()方法的建议。我测试了它,它可以恢复/停止更改。

然而,我担心的是,这种EntityManager.clear()方法是否也会影响其他实体。假设我们有并发事务发生,clear()会无意中分离所有其他实体吗?如果它真的影响了其他实体,我可以有什么解决办法?

请给我建议。

EN

回答 1

Stack Overflow用户

发布于 2021-10-08 11:02:19

EntityManager.clear()将分离持久化上下文中的所有实体,丢弃到目前为止在事务中对它们所做的更改。

detach应该忽略所有尚未刷新到数据库的更改。因此,可能是某个地方发生了刷新,也可能是持久性提供程序实现中的错误。

正如西蒙在评论中指出的那样,回滚似乎是一个更自然的解决方案( clear也会做几乎相同的w.r.t。挂起的更改)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69490953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档