私は、hereのように、hibernateのクラスあたりのテーブル階層を採用しました。hibernateのtable-per-class-hierarchy戦略で具体的なクラスを更新するにはどうすればよいですか?
私は、親がいくつかの属性を含み、子(複数)が同じものをもっと含む単純な1階層階層を得ました。オブジェクトとの関係もあります。例えば:私がする必要がどのような
@Table(uniqueConstraints = { @UniqueConstraint(columnNames = {"name"}) })
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING, length = 1)
abstract class X {
...
Long id;
String name;
List<A> a;
...
}
class Y extends X {
...
String getType() { return "Y"; }
...
}
class Z extends X {
...
String getType() { return "Z"; }
...
}
class A {}
は、整合性を維持するZのインスタンスにYの永続化インスタンスを「更新」です。私が削除Yを発行した場合。 Zを作成すると、ユニークな制約違反が発生します(作成/更新をフォローするための休止の順序による)が、YをZに「更新」する戦略はありません。
私は、階層の変更とサブタイプの列挙を使用して、具体的なクラスの違いを容易にしました。 –