Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Datanucleus谷歌应用程序引擎一对多关系_Java_Google App Engine_Jpa 2.0_Datanucleus - Fatal编程技术网

Java Datanucleus谷歌应用程序引擎一对多关系

Java Datanucleus谷歌应用程序引擎一对多关系,java,google-app-engine,jpa-2.0,datanucleus,Java,Google App Engine,Jpa 2.0,Datanucleus,我有以下代码: @Entity public class Incident { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true") private String incidentId; @Persistent @Extension(vendo

我有以下代码:

@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;

    ...
}
@实体
公开课事件{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@扩展名(vendorName=“datanucleus”,key=“gae.encoded pk”,value=“true”)
涉及的私人字符串;
@持久的
@扩展名(vendorName=“datanucleus”,key=“gae.pk id”,value=“true”)
私有长密钥ID;
@OneToMany(mappedBy=“事件”)
@OrderBy(“requestId”)
@JoinColumn(name=“事件ID”)
公开名单请求;
...
}
@实体
公共类服务请求{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@扩展名(vendorName=“datanucleus”,key=“gae.encoded pk”,value=“true”)
私有字符串请求ID;
@持久的
@扩展名(vendorName=“datanucleus”,key=“gae.pk id”,value=“true”)
私有长密钥ID;
私人事件;
...
}
使用它的场景是首先创建并持久化ServiceRequest,然后创建一个事件并将现有的ServiceRequest添加到其中——但当我尝试持久化一个事件时,出现了以下错误
由以下原因引起:org.datanucleus.exceptions.nucleuserexception:id为“agxzbWFydGNpdHlhZ2hyFAsSDlNlcnZpY2VSZXF1ZXN0GAEM”的对象由另一个对象管理器管理

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

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

  • 找一个新的PersistenceManager
  • 把你需要的东西拿来
  • 用它做任何你想做的事情,包括实例化其他类中的其他实体,并以某种方式将它们链接起来
  • 使用pm保存所有内容
  • 关闭pm
问题是,如果您使用多个实体,则需要使用同一个PersistenceManager实例


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

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

  • 找一个新的PersistenceManager
  • 把你需要的东西拿来
  • 用它做任何你想做的事情,包括实例化其他类中的其他实体,并以某种方式将它们链接起来
  • 使用pm保存所有内容
  • 关闭pm
问题是,如果您使用多个实体,则需要使用同一个PersistenceManager实例


而“现有服务请求”由另一个EntityManager管理,您可以使用EM上的方法轻松检查该EntityManager,查看它正在管理什么。如果已分离,则它不由任何东西管理,因此不可能将现有(已持久化)对象添加到新对象中?或者我可以把它和我的事件联系起来?当然有可能。。。。当它由同一个EntityManager管理时(如JPA规范所述)。您不提供从何处获得此现有对象的信息,“现有服务请求”由另一个EntityManager管理,您可以使用EM上的方法轻松检查该EntityManager以查看其管理的内容。如果已分离,则它不由任何东西管理,因此不可能将现有(已持久化)对象添加到新对象中?或者我可以把它和我的事件联系起来?当然有可能。。。。当它由同一个EntityManager管理时(如JPA规范所述)。您不提供从OK获得此现有对象的位置信息-它工作:)。但是我使用的不是PersistentManager而是EntityManager——这两者之间有区别吗?现在我遇到了另一个问题——当我试图从数据库中获取我的“事件”时,它们的请求字段为空。我正在使用代码
EntityManager em=EMF.get().createEntityManager()获取它们;Query q=em.createQuery(“通过incidentId从事件i顺序中选择i”);List List=q.getResultList()我还尝试将请求字段从public更改为private,并创建适当的setter和getter,但仍然不起作用。当您拥有列表时,请求字段为空,直到您访问它(在您关闭EntityManager之前!),只要访问它,它就会被动态加载。这叫做延迟加载,一种节省资源的技术。阅读我对OK的回答——它起作用了:)。但是我使用的不是PersistentManager而是EntityManager——这两者之间有区别吗?现在我遇到了另一个问题——当我试图从数据库中获取我的“事件”时,它们的请求字段为空。我正在使用代码
EntityManager em=EMF.get().createEntityManager()获取它们;Query q=em.createQuery(“通过incidentId从事件i顺序中选择i”);List List=q.getResultList()我还尝试将请求字段从public更改为private,并创建适当的setter和getter,但仍然不起作用。当您拥有列表时,请求字段为空,直到您访问它(在您关闭EntityManager之前!),只要访问它,它就会被动态加载。这叫做延迟加载,一种节省资源的技术。读我对你的回答