我有一个实体,代表客户发送的订单,该订单可能会在与客户电话讨论后更新,但客户发送的初始订单必须保持不变。我如何将同一实体保存两次,使用深度克隆是否有效。我试图分离实体以使持久性上下文持久化一个新实体,但持久性上下文仍在更新第一个条目。
问问题
1655 次
3 回答
2
您不能在一个会话中将一个对象持久化两次,因此您需要复制您的订单并再次保存(持久化)它。 休眠将对象值复制到具有新生成 ID 的新对象中
于 2013-06-19T17:30:15.073 回答
0
这是一个有趣的问题。我认为最快的解决方案可能是使用多部分 ID。第一部分将是原始订单号,然后每次更改都会增加密钥的第二部分。在您的代码中,您只需要找到对象,确保它已分离,更改密钥的第二部分,然后将其持久化。只要它被分离,它就应该作为新订单保存起来。
这篇文章向您展示了如何使用复合键。
于 2013-06-19T16:57:08.200 回答
0
您需要克隆/复制对象,确保它具有唯一的 id(如果生成,则为 null)。
在 EclipseLink 中有一个用于复制对象的 API,
http://wiki.eclipse.org/EclipseLink/Examples/JPA/AttributeGroup#Copy_Examples
于 2013-06-20T14:14:00.033 回答