7

JPA/Hibernateアプリで特定のタイプを処理するようにCompositeUserTypeを定義しようとしています。マッピングを処理するように設計されたApplicationMessageTypeというCompositeUserTypeがあります。

私が読んだことによると、TypeDefsを含む私のドメイン階層にpackage-info.javaクラスを作成できるはずです。私のはこのように見えます:

@TypeDefs({
    @TypeDef(
        defaultForType = ApplicationMessage.class,
        typeClass = ApplicationMessageType.class
    )
})
package mptstp.domain;

import mptstp.domain.messages.ApplicationMessage;

import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;

TypeDefにdefaultForTypeパラメーターを使用しているという事実を正しく理解していれば、ApplicationMessageを保存またはロードしようとするたびに、カスタムタイプコードを呼び出す必要があります。

ApplicationMessageTypeクラス内のすべてのメソッドにブレークポイントを設定しましたが、いずれも呼び出されません 。

誰かが私がどこで間違っているのか知っていますか?コードはコンパイルされますが、ApplicationMessageTypeを登録するためにTypeDefアノテーションが呼び出されなかったようです。

任意のポインタをいただければ幸いです...

ありがとう

4

1 に答える 1

3

JPA/Hibernate アプリで特定のタイプを処理する CompositeUserType を定義しようとしています。マッピングを処理するように設計された ApplicationMessageType という CompositeUserType があります。

複合ユーザー タイプ@Columnsのフィールドまたはプロパティ レベルで(注釈を使用して) 列を宣言する必要があることに注意してください。

私が読んだことによると、ドメイン階層に package-info.java クラスを作成できるはずTypeDefsです。

これは正しく、カスタム タイプが複数のエンティティで使用されている場合に推奨される戦略です。

TypeDef に defaultForType パラメータを使用しているという事実を正しく理解していれば、ApplicationMessage を保存またはロードしようとするたびに、カスタム型コードを呼び出す必要があります。

理論的には、defaultForType要素は、Hibernate が class のプロパティに遭遇したときにApplicationMessage、永続化戦略をカスタム マッピング type に委譲することになっていることを意味しApplicationMessageTypeます。

しかし、これが複合ユーザー タイプでどのように機能するかは確かですが、@Typeを宣言するために を繰り返す必要があるかどうかはわかりません@Columns(その場合、 でnameエイリアスを宣言する必要がありますTypeDef)。

私がどこで間違ったのか誰にもわかりませんか?コードはコンパイルされますが、ApplicationMessageType を登録するために TypeDef アノテーションが呼び出されていないようです。

言えません。クラスのプロパティを持つエンティティを永続化することに実際に成功しましたか、ApplicationMessageそれともまったく成功しませんでしたか? たぶん、注釈付きのエンティティを表示します。

参照

資力

于 2010-09-29T01:10:23.667 に答える