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插件中体现的逻辑(这是有意义的)。