2011-10-19 41 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