2.4.6. コレクション関連アノテーション
2.4.6.1. コレクション設定の拡張
設定可能
- @BatchSize を使用したコレクションのバッチサイズ
- @Where (ターゲットエンティティに適用) または @WhereJoinTable (関係テーブルに適用) を使用する where 句
- @Check を使用する check 句
- @OrderBy を使用した句別の SQL の順序
- @OnDelete(action=OnDeleteAction.CASCADE) を使用した削除カスケード方針
- @Immutable を使用したコレクション変更不可能性: 設定された場合は、コレクションのエレメントが変更しないよう指定されます (場合によっては若干のパフォーマンスの最適化がもたらされます)。
@Persister
を使用したカスタムコレクションパーシスタ (使用された永続化方針): クラスはorg.hibernate.persister.collectionCollectionPersister
を実装する必要があります。
また、ソート比較演算子を宣言することもできます。
@Sort
アノテーションを使用してください。未ソート、自然、またはカスタム比較演算子から比較演算子タイプを指定します。独自の比較演算子実装を使用する場合は、comparator
属性を使用して実装クラスを表現する必要があります。SortedSet
または SortedMap
インターフェースのいずれかを使用する必要があることに注意してください。
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER) @JoinColumn(name="CUST_ID") @Sort(type = SortType.COMPARATOR, comparator = TicketComparator.class) @Where(clause="1=1") @OnDelete(action=OnDeleteAction.CASCADE) public SortedSet<Ticket> getTickets() { return tickets; }
詳細については、これらのアノテーションの以前の説明を参照してください。
外部キー制約 (Hibernate により生成される) は、非常に読みにくい名前を持っています。この制約名は
@ForeignKey
を使用して制約名をオーバーライドできます。このアノテーションはもう一方の制約を参照する関係 inverseName
の所有者側に配置する必要があります。
@Entity
public class Woman {
...
@ManyToMany(cascade = {CascadeType.ALL})
@ForeignKey(name = "TO_WOMAN_FK", inverseName = "TO_MAN_FK")
public Set<Man> getMens() {
return mens;
}
}
alter table Man_Woman add constraint TO_WOMAN_FK foreign key (woman_id) references Woman
alter table Man_Woman add constraint TO_MAN_FK foreign key (man_id) references Man