3.4.5.2. @Any


@Any アノテーションは、複数のテーブルからのクラスに対してポリモーフィックな関係を定義します。このタイプのマッピングは常に複数のカラムを必要とします。最初のカラムは関連するエンティティのタイプを保持します。残りのカラムは ID を保持します。このような関係に対して外部キー制約を指定することはできません。したがって、これは、(ポリモーフィックな) 関係をマップする通常の方法ではありません。これは、非常に特殊な場合 (監査ログ、ユーザーセッションデータなど) にのみ使用してください。
@Any アノテーションはメタデータ情報を保持するカラムを定義します。メタデータ情報の値と実際のエンティティタイプをリンクするために、@AnyDef 関係と @AnyDefs 関係が使用されます。
    @Any( metaColumn = @Column( name = "property_type" ), fetch=FetchType.EAGER )
    @AnyMetaDef( 
        idType = "integer", 
        metaType = "string", 
        metaValues = {
            @MetaValue( value = "S", targetEntity = StringProperty.class ),
            @MetaValue( value = "I", targetEntity = IntegerProperty.class )
        } )
    @JoinColumn( name = "property_id" )
    public Property getMainProperty() {
        return mainProperty;
    }
Copy to Clipboard Toggle word wrap
idType はターゲットエンティティ ID プロパティタイプを表し、metaType はメタデータタイプ (通常は String) を表します。
@AnyDef は相互的にし、再利用できます。この場合は @AnyDef をパッケージメタデータとして配置することが推奨されます。
//on a package
@AnyMetaDef( name="property" 
    idType = "integer", 
    metaType = "string", 
    metaValues = {
        @MetaValue( value = "S", targetEntity = StringProperty.class ),
        @MetaValue( value = "I", targetEntity = IntegerProperty.class )
    } )
package org.hibernate.test.annotations.any;


//in a class
    @Any( metaDef="property", metaColumn = @Column( name = "property_type" ), fetch=FetchType.EAGER )
    @JoinColumn( name = "property_id" )
    public Property getMainProperty() {
        return mainProperty;
    }
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat