2011-09-06 8 views
1

以下がJPA注釈付き型階層内のすべてのデータフィールド(および関連するゲッターとセッター)は、ビジネスロジックを実装するための抽象メソッドと一緒にスーパータイプのメンバーであります。データメンバを追加せずにこれらの抽象メソッドを実装するサブタイプはいくつでもあります。このため、単一のテーブル継承ストラテジを使用して、このタイプ階層をバックアップするデータベースが1つだけ必要です。JPA /休止状態:サブタイピング戦略対「パターン」

データの内容に基づいて、究極の目標を達成するために実装する必要があります異なる動作がある、ので、私はそれをこのようにやりました。

@Entity 
@Table 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn 
public abstract class SuperEntity { 
    // Several fields and getters and setters 
    ... 
    // Abstract method declarations for business logic 
    ... 
} 

@Entity 
@DiscriminatorValue("some value") 
public class SomeSubtype extends SuperEntity { 
    // Implementations of abstract methods 
    ... 
} 

これはJPA/Hibernateでのディスクリミネータ列のコンセプトの変容ですか?

同僚は、データの構造は、サブタイプサブタイプから変化しないので、抽象メソッドおよび対応する実装戦略パターンアプローチのように移動しなければならないと主張します。彼の考えはより良い?

答えて

1

これは非常に主観的です。コンポジションや戦略は有効な選択肢だと思うので、ビジネスロジックを実装するたびに別のエンティティをマップする必要がありません。

JPAと、脇に私が今までの行動を共有するための「継承を超える賛成組成物」との開始を読んだすべてのオブジェクト指向設計の本を休止。あなたは一つのデータオブジェクトを持っていたと仮定すると

は、各非休止戦略間でオブジェクトを共有し、その上で動作することができませんでしたか?いずれにしても、JPA /休止状態が少なくて済むのは目の前で簡単です。

+0

私は構図を見ていましたが、それはサービス層ではちょっと混乱します。しかし、私はあなたと私の同僚に、私が上記の継承スキームが偉大ではないことをますます認めていると思います。あなたの答えに感謝の意を表します。 – simpleton