如何坚持实体两次JPA

时间:2013-06-19 16:45:57

标签: java jpa

我有一个实体,代表客户发送的订单,此订单可能会在与客户通过电话进行一些讨论后更新,但客户发送的初始订单必须保留而不更新。 我如何能够坚持两次相同的实体,使用深度克隆是否有效。 我试图分离实体,以便持久化上下文保持新的,但仍然持久化上下文正在更新第一个条目。

3 个答案:

答案 0 :(得分:2)

您无法在一个会话中将一个对象保留两次,因此您需要复制订单并再次保存(保留)它。 hibernate copy object values into new object with new generated ID

答案 1 :(得分:0)

这是一个有趣的问题。我认为最快的解决方案可能是使用多部分ID。第一部分是原始订单号,然后每次更改都会增加密钥的第二部分。在您的代码中,您只需要找到对象,确保它已分离,更改密钥的第二部分然后保留它。只要它已被分离,它就应该作为新订单保存起来。

这篇文章向您展示了如何使用composite key

答案 2 :(得分:0)

您需要克隆/复制对象,确保它具有唯一的ID(如果生成则为null)。

在EclipseLink中有一个用于复制对象的API,

http://wiki.eclipse.org/EclipseLink/Examples/JPA/AttributeGroup#Copy_Examples