0

我有一个实体,代表客户发送的订单,该订单可能会在与客户电话讨论后更新,但客户发送的初始订单必须保持不变。我如何将同一实体保存两次,使用深度克隆是否有效。我试图分离实体以使持久性上下文持久化一个新实体,但持久性上下文仍在更新第一个条目。

4

3 回答 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 回答