事前にインターフェイスを実装していなかったenumを、@Enumerated(EnumType.STRING)
を使って所有者クラスと同じテーブルにenumを格納する既存のデータベースにマップする必要があります。Hibernate enum mapping
class A {
HasName name;
}
interface HasName {
String getName();
}
enum X implements HasName {
John, Mary;
public String getName() { return this.name(); }
}
enum Y implements HasName {
Tom, Ann;
public String getName() { return this.name(); }
}
この場合、マッピングをどのように処理する必要がありますか?インターフェイスを実装するすべての列挙型が異なる値を持つため、データベースへの永続化は変更されませんが、DBからオブジェクトを取得する方法がわかりません(カスタムマッパーが必要ですか? enumは指定された列挙型クラスを使用していますか?Hibernateはネイティブにこの機能をサポートしていますか?
私の場合は、列挙型のクラスがどうなるか分かりません。 'A'をインスタンス化するとき、Hibernateは{X、Y}列挙の1つを選ぶ必要があります。 – dm3
サンプルのUserType実装を必要に応じて調整するのは難しいことではありません。たとえば、値だけを保存する代わりに、クラスを保存することもできます(例:com.example.X.JohnまたはX.Johnですが、Xからcom.example.Xへのマッピングが必要です) – sfussenegger
Iを意味しますカスタムマッパーが必要です(pastebinへのリンクが表示されませんでした)。答えをありがとう。 – dm3