1

我有以下代码:

@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: Object with id “agxzbWFydGNpdHlhZ2hyFAsSDlNlcnZpY2VSZXF1ZXN0GAEM”由不同的对象管理器管理

4

1 回答 1

1

我建议您从以下开始,然后告诉您深入研究有关所有数据存储的文档 JDO Stuff。然后感谢谷歌。:-)

您必须使用相同的持久性管理器一次完成所有读取/创建/保存/更新任务。这意味着在相同的方法或代码块中,您必须:

  • 获取新的 PersistenceManager
  • 获取您需要的 EntityA
  • 用它做任何你想做的事,包括从其他类实例化其他实体并以某种方式将它们全部链接起来
  • 使用 pm 来坚持一切
  • 关闭下午

问题是,如果您使用多个实体,则需要使用相同的 PersistenceManager 实例。

JDO 文档 - 谷歌

于 2012-07-31T23:12:07.730 回答