0

クラスと、他の多くのソリューションサブクラスのようなProblem基本クラスを拡張する他のさまざまなクラスがあります。クラスはソリューション リストを必要としませんが、さまざまなソリューション クラスの「外部キー」になります。SolutionBasicSolutionExpertSolutionProblemProblem

したがってProblem、さまざまなソリューション テーブル (ソリューション サブクラスごとに 1 つのテーブル) でテーブルの外部キーが必要です。Hibernate を介してどのように達成できますか?

これが Hibernate の観点からは適切な DB 設計ではないことはわかっていますが、これはレガシー システムであり、微調整することはできません。1 対多のエンティティの関連付けは知っていますが、それには Solution リストが Problem クラスに存在する必要があります (これは望ましくありません)。

この問題の答えを教えてください。

4

1 に答える 1

1

@ManyToOne 関連付けを使用して、Solution 基本クラスのリレーションをマップする必要があります。

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class Solution {
...
    private Problem _problem;

    @ManyToOne
    @JoinColumn(name="PROBLEM_ID")
    public Problem getProblem() {
        return _problem;
    }
...
}

すべての Solution サブクラスは、Problem と関係があります。

@ManyToOne の代わりに @OneToOne を使用することもできます。違いは、@ManyToOne はリレーションのこちら側に外部キーを持たなければならないことです。

于 2012-04-12T07:22:10.487 に答える