2011-10-19 5 views
0

私は、次の2つのエンティティがありますのAppEngine:所有する、双方向の1対多の関係で保持孤児

私はem.removeを持つ親を削除してい
@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; 
} 

(SupermarketChain.class、キー)すべての孤児も削除されます。私はドキュメント内のrelevant paragraphを読んで、@ Element(dependent = "false")でJDOを試してみましたが、問題は残ります。どのようにして孤児をその関係に保つことができますか?

答えて

0

オーファンを保持することは意味がありません。 GAE JDO/JPAのv1では、すべてのリレーションシップが「所有」されているので、あなたはどの子も親を持たなければなりません。親が存在しなくなった場合、その子は削除されます。常に。

GAE JDO/JPAのv2では、所有されていないオブジェクトも持つことができるため、「親」は存在しないため、後で存在し続けることができます。

+0

App Engineでは、孤児を保持する(または作成する)ことは意味があります。共通の親を共有する2つのエンティティを持つことは、たとえその親が存在しなくても、同じエンティティグループに物事をどのように置くかです。つまり、両者の親である架空のエンティティを持つことです。これは、JDOのセマンティクスとApp Engineのセマンティクスが、私が思うところで混乱を起こすほど十分に異なる場合です。 「孤児を守ることは意味をなさない」と言っても間に合わない。 –

+0

「JDOセマンティクス」と「AppEngineセマンティクス」の違いを知りません。 JDOは単にAPIを定義します。親キーがないときは、削除を要求したり、親キーがない場合は(親キーについても何も要求しないため)。 (私が上で述べた)ロジックは、GAEのスタッフがJDOプラグインに実装したものです(意味があるように)。 – DataNucleus

関連する問題