7

最近、休止状態のマッピングされたエンティティの一部にインターフェイスを導入しようとしていますが、マッピングを構成する方法がわかりません。

それ以上宣言せずにインターフェイスを使用すると、常に次の例外が発生しました。

org.hibernate.MappingException: Could not determine type for: ...MyInterface 

次に、targetEntity を明示的に定義すると、すべてが正常に機能することがわかりました。

   @OneToOne(targetEntity=InterfaceImpl.class)
   private MyInterface myInterface;

残念ながら、この解決策は私の場合には機能しません。インターフェイスの最終的な実装を含まず、知らない共通の外部ライブラリにこのクラスを抽出したいので、注釈を介して targetEntity を定義することはできません。

どの実装を使用するかを宣言する別の方法はありますか?抽出されたライブラリの外部で使用できますか?ここに画像の説明を入力

4

2 に答える 2

1

休止状態の注釈がどのように機能するかはわかりませんが、ここで説明されている同様のことをしました

かなり完全な説明については、最後の投稿を参照してください。

基本的なニーズは、hibernate マッピング ファイルでインターフェイスを指定し、実装は主に javassist を使用して実行時に作成されたクラスであるという意味で類似していました (それらはコンパイル時に存在しませんでした)。

必要なのは、実行時にインターフェイスから実装クラスを解決できるコード、およびその逆の実装クラスを解決し、hibernate tuplizer/instantiator コントラクトを拡張ポイントとして使用して hibernate を許可するコードです。

(a) DB からエンティティを取り込む必要がある場合は実装インスタンスを作成し、(b) エンティティ (実装インスタンス) を DB に格納する必要がある場合は休止状態のマッピング メタデータを検索します。

于 2013-03-11T14:37:22.913 に答える
1

抽象でマッピング コントラクトを定義し、実装クラスで@MappedSupperclass それをオーバーライドします。@AssociationOverride

于 2013-03-11T12:53:13.697 に答える