0

1つのテーブルへの自己参照マッピング(親/子のような関係)マッピングを実行しようとしています。

私が持っているのは、プロパティなどを分離できるように、同じテーブルの2つの異なるエンティティです。識別子の値を使用することを考えていましたが、データベースがすでに次のように定義されているため、使用できません。親と子を区別するために、子タイプに対してnullではないparent_id列があります(parent_idはもちろん外部キーです)同じテーブルに)。次の方法でディスクリミネーター値を定義する方法はありません。オブジェクトが親タイプの場合、ディスクリミネーター値は子をnullにします。

私は解決策を探していました、そして私は少し立ち往生しています。たぶん、親(子の場合はnullではない@ManyToOne)と子のリスト(子の場合は@OneToMany null)を参照する2つのプロパティを持つ1つのエンティティを使用することになります。しかし、それまで(現時点では、1つのエンティティを使用することを決定する必要があります)、私がやろうとしていることを実行するための回避策があるかどうかを尋ねたいと思います。

4

2 に答える 2

2

弁別器は「公式」にすることができます。これは厳密にはHibernate機能であり、JPAではサポートされていません。@ org.hibernate.annotations.DiscriminatorFormulaを使用すると、次のようになります。

@Entity
@Inheritance(strategy=SINGLE_TABLE)
@DiscriminatorFormula( "case when parent_id is null then 'PARENT' ELSE 'CHILD' end" )
@DiscriminatorValue("PARENT")
public class Parent {
    ...
}

// map Child using @DiscriminatorValue("CHILD")
于 2012-05-30T15:00:32.990 に答える
0

別の解決策は、特別な休止状態の値を利用することです@DiscriminatorValue("null")@DiscriminatorValue("not null")

@Entity
@Inheritance(strategy=SINGLE_TABLE)
@DiscriminatorColumn("parent_id")
@DiscriminatorValue("null")
public class Parent {
    ...
}

@Entity
@DiscriminatorValue("not null")
public class Child extends Parent {
    ...
}
于 2012-07-03T05:31:48.060 に答える