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

标签 java spring jpa clone

在我的 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/

相关文章:

java - java中二维数组的排序和反转

spring - 了解Grails上的WebFlow

java - 使用 Google 应用程序引擎进行 Spring Bootstrapping

java - Spring MVC RequestMapping ParamRequest 集合/数组

java - Hibernate选择子对象进入界面

java - 找不到符号 ArrayList

java - 如何使用 Spring boot 调度程序获取差价

java - Android 中如何获取某个目录下的文件列表?

java - Hibernate SessionFactory 与 JPA EntityManagerFactory

hibernate - 如何在Hibernate/JPA中为每个持久单元执行differnet import.sql?