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 スタッフを深く学習するように伝えます。次に、Google に感謝します。:-)

すべての読み取り/作成/保存/更新タスクを一度に実行するには、同じ持続性マネージャーを使用する必要があります。つまり、同じメソッドまたはコード ブロックで、次のことを行う必要があります。

  • 新しい PersistenceManager を入手する
  • 必要な EntityA を取得します
  • 他のクラスから他のエンティティをインスタンス化し、それらすべてを何らかの方法でリンクするなど、必要なことは何でも行います
  • pm を使用してすべてを永続化します
  • 午後を締めくくる

問題は、複数のエンティティを操作する場合、同じ PersistenceManager インスタンスを使用する必要があるということです。

JDO ドキュメント - Google

于 2012-07-31T23:12:07.730 に答える