第3章 Hibernate アノテーション

3.1. Hibernate アノテーション

Org.hibernate.annotations パッケージには、標準の Jakarta Persistence アノテーションの上に Hibernate によって提供されるアノテーションが含まれます。

表3.1 一般的なアノテーション

アノテーション説明

Check

クラス、プロパティー、またはコレクションレベルで定義できる任意の SQL チェック制約。

Immutable

エンティティーまたはコレクションにイミュータブルとしてマークを付けます。アノテーションがないということは、要素が変更されたことを意味します。

イミュータブルなエンティティーはアプリケーションによって更新されない可能性があります。イミュータブルなエンティティーの更新は無視されますが、例外は発生しません。

@Immutable をコレクションに配置すると、コレクションがイミュータブルな状態になり、コレクションへの追加および削除は許可されません。この場合、HibernateException が発生します。

表3.2 キャッシュエンティティー

アノテーション説明

Cache

キャッシュストラテジーをルートエンティティーまたはコレクションに追加します。

表3.3 コレクション関連のアノテーション

アノテーション説明

MapKeyType

永続マップのキーのタイプを定義します。

ManyToAny

異なるエンティティータイプを参照する ToMany 関連付けを定義します。エンティティータイプのマッチングは、メタデータの識別子コラムを使用して行われます。このようなマッピングはマージのみにする必要があります。

OrderBy

SQL 順序付け (HQL の順序ではなく) を使用してコレクションを順序付けます。

OnDelete

コレクション、アレイ、および結合されたサブクラスの削除で使用するストラテジー。現在、セカンダリーテーブルの OnDelete はサポートされていません。

Persister

カスタム永続機能を指定します。

Sort

コレクションのソート (Java レベルのソート)。

Where

コレクションのエンティティーまたはターゲットエンティティーに追加する要素。レシピは SQL で記述されます。

WhereJoinTable

コレクションジョインテーブルに追加する部分。レシピは SQL で記述されます。

表3.4 CRUD 操作のためのカスタム SQL

アノテーション説明

Loader

Hibernate デフォルトの FIND メソッドを上書きします。

SQLDelete

Hibernate デフォルトの DELETE メソッドを上書きします。

SQLDeleteAll

Hibernate のデフォルト DELETE ALL メソッドを上書きします。

SQLInsert

Hibernate のデフォルト INSERT INTO メソッドを上書きします。

SQLUpdate

Hibernate デフォルトの UPDATE メソッドを上書きします。

Subselect

イミュータブルで読み取り専用のエンティティーを指定の SQL サブ選択式にマッピングします。

Synchronization

自動フラッシュが正しく実行され、派生エンティティーに対するクエリーが古いデータを返さないようにします。大半は Subselect とともに使用されます。

表3.5 エンティティー

アノテーション説明

Cascade

関連付けにカスケードストラテジーを適用します。

Entity

標準の @Entity で定義された以外のメタデータが必要になる可能性のある追加のメタデータを追加します。

  • mutable: このエンティティーが変更可能であるかどうか
  • dynamicInsert : 動的な SQL を許可する
  • DynamicUpdate: 更新のための動的 SQL を許可する
  • selectBeforeUpdate: オブジェクトが実際に変更されたことが明らかでない場合、Hibernate が SQL UPDATE を実行しないように指定します。
  • polymorphism: エンティティーポリモーフィズムは PolymorphismType.IMPLICIT (デフォルト) または PolymorphismType.EXPLICIT のいずれか
  • optimisticLock: 楽観的ロックストラテジー (OptimisticLockType.VERSION、OptimisticLockType.NONE、OptimisticLockType.DIRTY または OptimisticLockType.ALL)

    注記

    アノテーション Entity は非推奨となり、今後のリリースで削除される予定です。個別の属性または値はアノテーションになります。

Polymorphism

ポリモーフィズム Hibernate のタイプを定義するために使用されます。

Proxy

特定のクラスのレイジーおよびプロキシー設定。

Table

プライマリーまたはセカンダリーのテーブルに情報を補完します。

Tables

Table の複数形のアノテーション。

Target

明示的なターゲットを定義し、反映および汎用的な解決を回避します。

Tuplizer

エンティティーまたはコンポーネントの tuplizer を定義します。

Tuplizers

エンティティーまたはコンポーネントの一連の tuplizer を定義します。

表3.6 フェッチ

アノテーション説明

BatchSize

SQL 読み込みのバッチサイズ。

FetchProfile

フェッチストラテジープロファイルを定義します。

FetchProfiles

@FetchProfile の複数形のアノテーション。

LazyGroup

エンティティー属性が同じグループに属する他のすべての属性と共にフェッチされる必要があることを指定します。エンティティー属性をレイジーに読み込むには、バイトコード拡張が必要です。デフォルトでは、すべての非コレクション属性は DEFAULT という名前のグループに読み込まれます。このアノテーションを使用すると、グループ内の属性にアクセスするときに異なる属性のグループを同時に初期化できます。

表3.7 フィルター

アノテーション説明

Filter

フィルターをエンティティーまたはコレクションのターゲットエンティティーに追加します。

FilterDef

フィルター定義。

FilterDefs

フィルター定義の配列。

FilterJoinTable

フィルターを結合テーブルコレクションに追加します。

FilterJoinTables

複数の @FilterJoinTable をコレクションに追加します。

フィルター

複数の @Filter を追加します。

ParamDef

パラメーター定義。

表3.8 プライマリーキー

アノテーション説明

Generated

このアノテーション付きプロパティーはデータベースによって生成されます。

GenericGenerator

タイプ解除された方法で、あらゆる Hibernate generator を記述するジェネレーターアノテーション。

GenericGenerators

汎用ジェネレーター定義のアレイ。

NaturalId

プロパティーがエンティティーの純粋な ID の一部であることを指定します。

Parameter

キー/値のパターン。

RowId

Hibernate の ROWID マッピング機能のサポート。

表3.9 継承

アノテーション説明

DiscriminatorFormula

ルートエンティティーに配置されるイデンティターの式。

DiscriminatorOptions

Hibernate 固有の識別子プロパティーを表示するオプションのアノテーションです。

MetaValue

指定の識別子値を対応するエンティティータイプにマッピングします。

表3.10 JP-QL/HQL クエリーのマッピング

アノテーション説明

NamedNativeQueries

NamedNativeQueries を拡張して、Hibernate NamedNativeQuery オブジェクトを保持します。

NamedNativeQuery

Hibernate 機能を使用した NamedNativeQuery の拡張

NamedQueries

NamedQuery を拡張して Hibernate NamedQuery オブジェクトを保持します。

NamedQuery

Hibernate 機能を使用して NamedQuery を拡張します。

表3.11 簡単なプロパティーのマッピング

アノテーション説明

AccessType

プロパティーアクセスタイプ。

Columns

列のアレイをサポートします。コンポーネントのユーザータイプマッピングに便利です。

ColumnTransformer

値をコラムから読み取り、コラムに書き込むために使用するカスタムの SQL 式。クエリーとともにオブジェクトの直接読み込み/保存に使用します。書き込み式には、値に対して 1 つの '?' プレースホルダーが必ず含まれている必要があります。

ColumnTransformers

@ColumnTransformer の複数のアノテーション複数のコラムがこの動作を使用している場合に便利です。

表3.12 プロパティー

アノテーション説明

Formula

大半の場所で、@Column の代わりとして使用するために使用されます。式は有効な SQL フラグメントである必要があります。

Index

データベースインデックスを定義します。

JoinFormula

大半の場所で、@JoinColumn の代わりとして使用するために使用されます。式は有効な SQL フラグメントである必要があります。

Parent

プロパティーを所有者 (通常は所有するエンティティー) へのポインターとして参照します。

Type

Hibernate タイプ。

TypeDef

Hibernate タイプ定義。

TypeDefs

Hibernate タイプ定義の配列。

表3.13 単一の関連付け関連のアノテーション

アノテーション説明

Any

複数のエンティティータイプを参照するトール関連付けを定義します。一致したエンティティータイプのマッチングは、メタデータの識別子コラムを使用して行われます。このようなマッピングはマージのみにする必要があります。

AnyMetaDef

@Any および @ManyToAny メタデータを定義します。

AnyMetaDefs

@Any および @ManyToAny のメタデータセットを定義します。エンティティーレベルまたはパッケージレベルで定義できます。

Fetch

指定の関連付けに使用されるフェッチストラテジーを定義します。

LazyCollection

コレクションのレイジーステータスを定義します。

LazyToOne

ToOne 関連づけのレイジーステータスを定義します (OneToOne または ManyToOne)。

NotFound

要素が関連上に見つからない場合に行うアクション。

表3.14 楽観的ロック

アノテーション説明

OptimisticLock

アノテーションが付けられたプロパティーの変更によってエンティティーバージョンの増分がトリガーされるかどうか。アノテーションが存在しない場合は、プロパティーが楽観的ロックストラテジーに関与します (デフォルト)。

OptimisticLocking

エンティティーに適用される楽観的ロックのスタイルを定義するために使用されます。階層では、ルートエンティティーでのみ有効です。

Source

Version および timestamp version プロパティーと併せてのオプションのアノテーションです。アノテーションの値で、タイムスタンプの生成先が決まります。