@Anyアノテーションは、複数のテーブルのクラスへのポリモーフィックな関連付けを定義します。このタイプのマッピングには、常に複数の列が必要です。最初の列は、関連付けられたエンティティのタイプを保持します。残りの列は識別子を保持します。この種の関連付けに外部キー制約を指定することは不可能であるため、これは(ポリモーフィック)関連付けをマッピングする通常の方法として意図されたものではないことは間違いありません。これは、非常に特殊な場合(監査ログ、ユーザーセッションデータなど)でのみ使用する必要があります。@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;
}
idTypeは、ターゲットエンティティの識別子プロパティタイプを表し、metaTypeはメタデータタイプ(通常は文字列)を表します。@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;
}
@ManyToAnyを使用すると、複数のテーブルからのクラスへのポリモーフィックな関連付けが可能になります。このタイプのマッピングには、常に複数の列が必要です。最初の列は、関連付けられたエンティティのタイプを保持します。残りの列は識別子を保持します。この種の関連付けに外部キー制約を指定することは不可能であるため、これは(ポリモーフィック)関連付けをマッピングする通常の方法として意図されたものではないことは間違いありません。これは、非常に特殊な場合(監査ログ、ユーザーセッションデータなど)でのみ使用する必要があります。
@ManyToAny(
metaColumn = @Column( name = "property_type" ) )
@AnyMetaDef(
idType = "integer",
metaType = "string",
metaValues = {
@MetaValue( value = "S", targetEntity = StringProperty.class ),
@MetaValue( value = "I", targetEntity = IntegerProperty.class ) } )
@Cascade( { org.hibernate.annotations.CascadeType.ALL } )
@JoinTable( name = "obj_properties", joinColumns = @JoinColumn( name = "obj_id" ),
inverseJoinColumns = @JoinColumn( name = "property_id" ) )
public List<Property> getGeneralProperties() {
Src:Hibernateアノテーションリファレンスガイド3.4.0GA
それが役に立てば幸い!