gpt4 book ai didi

java - 制作 JPA 实体的保护性副本

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:48:34 24 4
gpt4 key购买 nike

在我的 Spring 应用程序中,我有读取 XML 的代码,然后通过 JPA 获取例如组织实体,然后将在 XML 中找到的字段更新到组织并返回组织。

但是使用这样的代码:

Organization updated = mergeToOrganization(jaxbOrganizationPojo, originalOrganization);

我真的觉得我应该通过制作 originalOrganization 的保护性副本而不是直接改变它来启动 mergeToOrganization 方法。直接突变让我感到肮脏。但替代方案似乎是粗略的反射或 loooong get/set 样板代码。

想法?意见?

最佳答案

只要您正确处理事务,我就看不出直接突变有什么问题。但是如果你想从持久上下文中删除实体,假设你使用的是 JPA 2.0,你可以使用 EntityManager.detach() .这样,从技术上讲,实体永远不会被标记为“脏”,您不必为此感到难过。此外,请确保使用 merge() 将其保存回来,而不是 persist(),否则您会遇到许多讨厌的异常。

编辑 如果您想返回实体的新副本,目前为止我见过的最可靠的克隆方法是使用 ObjectOutputStream:http://javatechniques.com/blog/faster-deep-copies-of-java-objects/

关于java - 制作 JPA 实体的保护性副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14452872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com