制作JPA实体的保护副本

ver*_*tti 3 java spring jpa clone

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

但是使用这样的代码:

Organization updated = mergeToOrganization(jaxbOrganizationPojo, originalOrganization);
Run Code Online (Sandbox Code Playgroud)

我真的觉得我应该mergeToOrganization通过制作保护副本originalOrganization而不是直接改变它来启动方法.直接突变让我觉得很脏.但替代方案似乎是粗略的反映或loooong获取/设置锅炉板代码.

想法?意见?

Den*_*kiy 9

只要你正确处理交易,我不会看到直接变异的问题.但是,如果要从持久化上下文中删除实体,假设您使用的是JPA 2.0,则可以使用EntityManager.detach().这样,从技术上讲,实体永远不会被标记为"脏",您不必为此感到沮丧.此外,请确保使用merge()保存它,而不是persist(),或者你会得到许多讨厌的例外.

编辑如果你想回到你的实体的一个新副本,所以到目前为止,我见过的最防弹克隆方法是,使用ObjectOutputStream:http://javatechniques.com/blog/faster-deep-copies-of-java -objects /