【发布时间】:2012-07-31 13:45:19
【问题描述】:
我有以下代码:
@Entity
public class Incident {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
private String incidentId;
@Persistent
@Extension(vendorName="datanucleus", key="gae.pk-id", value="true")
private Long keyId;
@OneToMany(mappedBy="incident")
@OrderBy("requestId")
@JoinColumn(name="INCIDENT_ID")
public List<ServiceRequest> requests;
...
}
@Entity
public class ServiceRequest {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
private String requestId;
@Persistent
@Extension(vendorName="datanucleus", key="gae.pk-id", value="true")
private Long keyId;
private Incident incident;
...
}
使用它的场景是首先创建并持久化 ServiceRequest,然后创建一个事件并将现有的 ServiceRequest 添加到其中 - 但是当我尝试持久化一个事件时,我遇到了以下错误 原因:org.datanucleus.exceptions.NucleusUserException:ID 为“agxzbWFydGNpdHlhZ2hyFAsSDlNlcnZpY2VSZXF1ZXN0GAEM”的对象由不同的对象管理器管理
【问题讨论】:
-
并且“现有服务请求”由不同的 EntityManager 管理,您可以通过使用 EM 上的方法轻松检查它正在管理的内容。如果分离,则不受任何管理
-
所以不可能将现有的(已经持久化的)对象添加到新的对象中?或者也许我可以以某种方式将它附加到我的事件中?
-
当然有可能......当它由同一个 EntityManager 管理时(如 JPA 规范所说)。您没有提供从哪里获得此现有对象的信息
标签: java google-app-engine jpa-2.0 datanucleus