2011-10-19 17 views
0

我有以下两个实体:AppEngine上:在一个拥有双向one-to-many关系保留孤儿

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

当我删除与em.remove父(SupermarketChain.class,键) ,所有孤儿也将被删除。我阅读了文档中的relevant paragraph,甚至用@Element(依赖=“false”)用JDO尝试过,但问题仍然存在。我怎样才能保留这个关系中的孤儿?

回答

0

保留一个孤儿是没有意义的。在GAE JDO/JPA v1中,所有关系都是“拥有”的,所以你必须有任何孩子的父母。如果父母不再存在,那么该孩子将被删除。总是。

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

+0

保留(或创建)孤儿在App Engine中很有意义。拥有共享共同父项的两个实体(即使该父项不存在)是您如何将事物放入同一个实体组中 - 通过拥有一个虚构的实体作为它们的父代。在这种情况下,JDO语义和App Engine语义的差异足以导致我认为的一些混淆。说“保留孤儿没有意义”并不公平。 –

+0

不知道“JDO语义”和“AppEngine语义”之间有什么不同。 JDO只是定义了一个API。它没有强制删除,或者没有父键时(因为它没有强制父键的任何要求)。上面描述的逻辑是GAE工作人员在他们的JDO插件中体现的(因为有道理)。 – DataNucleus