0

AppEngine は、JPA 継承に対して「TABLE_PER_CLASS」と「MAPPED_SUPERCLASS」のみをサポートします。残念ながら、「JOINED」、特に「SINGLE_TABLE」はサポートされていません。

SINGLE_TABLE の代替を実装するための最良の代替手段は何ですか?

私の唯一の要件は次のとおりです。1)AbstractEmployee、InternalEmployee、ExternalExmployeeなどの個別のクラスを用意します。2) すべての従業員に対してクエリを実行できるため、InternalEmployee と ExternalEmployee の両方のインスタンスが生成されます。

私が考えている唯一のことは、すべてのフィールドを含む「大きな」従業員オブジェクトを使用することですか? 他のアイデアはありますか?

PS: http://code.google.com/p/googleappengine/issues/detail?id=8366で適切な「SINGLE_TABLE」サポートに投票してください

4

2 に答える 2

1

理論的には、 @Embeded および @Embeddable を使用して、関連するフィールドをオブジェクトにグループ化できます。したがって、次のようなクラスになります。

@Entity
public class Employee {
     // all the common employee fields go here 
     //

     // the discriminator column on Employee class lets you be specific in your queries          
     private Integer type; 

     @Emebded 
     private Internal internal; // has the fields that are internal

     @Embeded
     private External external; // has the fields that are external 

     equals & hashcode that compare based on the discriminator type and other fields 
} 
于 2012-10-31T13:54:14.407 に答える
0

AppEngine がサポートするものとサポートしないものは、そこで誤解を招くものです。AppEngine はプロパティ ストアを使用するため、任意の Kind が任意のプロパティを持つことができます。したがって、原則として、Kind には InternalEmployee および ExternalEmployee の「インスタンス」を含めることができます。AppEngine JPA が実際に行う唯一のことは、クラスのすべてのフィールドを 1 つの Kind オブジェクトに格納することです。これは、サブタイプを同じ Kind に格納すること (サブタイプ固有のフィールドに追加のプロパティを使用) を排除するものではありません。これは、「単一テーブル」と同等です。

PS、「AppEngine」全体でいくつかの問題を提起しても、何の応答も得られません (そこにある残りの問題を見てください ;-) )、ここで影響を受けるコードはhttp://codeの独自のプロジェクトにあることを念頭に置いてください。 .google.com/p/datanucleus-appengine にあり、独自の問題トラッカーがあります

于 2012-10-31T14:11:39.117 に答える