作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在我的 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/
我是一名优秀的程序员,十分优秀!