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