Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Google app engine AppEngine:在一对多的双向关系中保留孤儿_Google App Engine_Jpa_Jdo - Fatal编程技术网

Google app engine AppEngine:在一对多的双向关系中保留孤儿

Google app engine AppEngine:在一对多的双向关系中保留孤儿,google-app-engine,jpa,jdo,Google App Engine,Jpa,Jdo,我有以下两个实体: @Entity public class SupermarketChain { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true") private String key; @OneToMany(mappedBy = "supermarketChain") @Basic

我有以下两个实体:

@Entity
public class SupermarketChain {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
private String key;

@OneToMany(mappedBy = "supermarketChain")
@Basic
private List<Supermarket> supermarkets;
}

@Entity
public class Supermarket {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
private String key;

@ManyToOne(optional=true)
private SupermarketChain supermarketChain;
}
@实体
公共级超级市场{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@扩展名(vendorName=“datanucleus”,key=“gae.encoded pk”,value=“true”)
私钥;
@OneToMany(mappedBy=“Supermarketcain”)
@基本的
私人上市超市;
}
@实体
公营超市{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@扩展名(vendorName=“datanucleus”,key=“gae.encoded pk”,value=“true”)
私钥;
@多通(可选=真)
私人超市;
}

当我使用em.remove(supermarketcain.class,key)删除父级时,所有孤立项也将被删除。我阅读了文档中的,甚至用带有@Element(dependent=“false”)的JDO尝试了它,但问题仍然存在。我怎样才能在这种关系中留住孤儿呢?

留住孤儿毫无意义。在GAE JDO/JPA的v1中,所有关系都是“拥有”的,因此您必须拥有任何子级的父级。如果父对象不再存在,则子对象将被删除。总是


在GAE JDO/JPA的v2中,您还可以拥有无主对象,因此没有“父对象”,因此它们可以在以后继续存在。

在App Engine中保留(或创建)孤立对象是有意义的。有两个实体共享一个共同的父实体,即使该父实体不存在,这就是将事物放入同一个实体组的方式—通过有一个虚拟实体作为它们的父实体。我认为,在这种情况下,JDO语义和应用程序引擎语义的差异足以引起一些混淆。说“保留孤儿毫无意义”是不公平的。不知道“JDO语义”和“AppEngine语义”之间有什么区别。JDO只是定义了一个API。当没有父键时,它不会强制删除或以其他方式删除(因为它也不会强制执行有关父键的任何内容)。上面我描述的逻辑是GAE工作人员在他们的JDO插件中体现的逻辑(这是有意义的)。