1

レガシー アプリケーションを休止状態に変換しようとしています。

データベース内の完全修飾名文字列に基づいてオブジェクト インスタンスにインスタンス化する必要があるフィールドを持つエンティティがあります。

以下の例を考えてみてください。somePackageName.FirstClassデータベースにある場合、someObjectフィールドは のインスタンスである必要がありますFirstClass

プロパティ アクセスを使用して文字列を永続化/取得できると思いますが、それはあまりエレガントに見えません。

私は使用できません@PostLoad。 - 春 (JPA ではない) で純粋な休止状態を使用しています - これらの注釈は無視されます。

たとえば、MyBatis では、フィールドのカスタム ハンドラーを登録できることを知っています。Hibernate で同様のものを利用できますか?

私は冬眠するのが初めてなので、オプションが何であるかはよくわかりません。

@Entity
class SomePersistentClass{
   private SomeInterface someObject; 

}

class FirstClass implements SomeInterface{
}

class SecondClass implements SomeInterface{
}
4

1 に答える 1

0

適切な Hibernate イベントリスナーを有効にするだけで、@PostLoad などのコールバックなどの JPA 機能を使用できます。詳細については、Hibernate EntityManager ガイドを確認してください。

しかし、これはさらに簡単です。これは、Hibernate での Type の役割です。まず、org.hibernate.type.Type または org.hibernate.usertype.UserType の実装を記述し、変換を処理する @Type( type=... ) でそれを指定する必要があります (書き込みに関する多くの Web リソースカスタム Hibernate タイプ)。次に、「someObject」属性に @Type( type="your.custom.TypeImpl" ) で注釈を付けます

于 2012-05-17T14:49:08.637 に答える