1

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

データの内容に基づいて、最終的な目標を達成するために実装する必要のあるさまざまな動作があるため、このようにしました。

@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のディスクリミネーター列の概念の転覆ですか?

同僚は、データの構造はサブタイプごとに変化しないため、抽象メソッドと対応する実装を戦略パターンアプローチのようなものに移行する必要があると主張しています。彼の考えは良いですか?

4

1 に答える 1

1

ベターは非常に主観的です。構成と戦略は有効な代替手段のように思われます。そのため、ビジネスロジックの実装ごとに別のエンティティをマップする必要がなくなる可能性があります。

JPAと休止状態は別として、私が今まで読んだすべてのOOデザインブックは、動作を共有するための「継承よりも構成を優先する」から始まります。

データオブジェクトが1つあるとすると、非休止状態の各戦略間でオブジェクトを共有し、それを操作できませんか?いずれにせよ、JPA/休止状態が少ない方が目には簡単です。

于 2011-09-06T06:15:06.183 に答える