2.2.2. 単純なプロパティのマッピング

2.2.2.1. 基本的なプロパティマッピングの宣言

エンティティ Bean の静的かつ一時的でない各プロパティ (フィールドまたはメソッド) は、@Transient としてアノテートしない限り、永続的と見なされます。プロパティにアノテーションを設定しない場合は、適切な @Basic アノテーションが使用されます。@Basic アノテーションを使用すると、プロパティのフェッチ方針を宣言できます。
public transient int counter; //transient property

private String firstname; //persistent property

@Transient
String getLengthInMeter() { ... } //transient property

String getName() {... } // persistent property

@Basic
int getLength() { ... } // persistent property

@Basic(fetch = FetchType.LAZY)
String getDetailedComment() { ... } // persistent property

@Temporal(TemporalType.TIME)
java.util.Date getDepartureTime() { ... } // persistent property           

@Enumerated(EnumType.STRING)
Starred getNote() { ... } //enum persisted as String in database
counter (一時フィールド) と lengthInMeter (@Transient としてアノテートされたメソッド) は、エンティティマネージャによって無視されます。name プロパティ、length プロパティ、および firstname プロパティは永続としてマップされ、積極的にフェッチされます (単純なプロパティのデフォルト)。detailedComment プロパティ値は、エンティティのレイジープロパティが最初にアクセスされると、データベースから消極的にフェッチされます。通常は、単純なプロパティをレイジーにする必要はありません (レイジーアソシエーションフェッチと混同しないでください)。

注記

プロパティレベルのレイジーフェッチを有効にする場合は、クラスを実装する必要があります。このような機能を有効にするために、元のクラスにバイトコードが追加されます。Hibernate リファレンスドキュメンテーションを参照してください。クラスが実装されない場合は、プロパティレベルのレイジーローディングが暗黙的に無視されます。
推奨される別の方法は、EJB-QL または基準クエリの予測機能を使用することです。
EJB3 は、Hibernate によってサポートされたすべての基本タイプ (すべての基本的な Java タイプ、その対応するラッパー、およびシリアライズ可能なクラス) のプロパティマッピングをサポートします。Hibernate Annotations は、序数のカラム (Enum の序数の保存) または文字列ベースのカラム (Enum 文字列表現の保存) のいずれかに対するデフォルトの Enum タイプマッピングをサポートします。永続化表現 (デフォルトで序数に設定されます) は、note プロパティ例で示された @Enumerated アノテーションを使用して上書きできます。
中核的な Java API で、時間の正確性は定義されません。時間データを扱う場合は、データベースで期待された正確性を定義できます。時間データは DATETIME、または TIMESTAMP の正確性 (つまり、実際の日付、時間のみ、またはその両方) を持つことができます。@Temporal アノテーションを使用して微調整します。
@Lob は、プロパティタイプに応じてプロパティを Blob または Clob に永続化することを指定します。Clob では、java.sql.ClobCharacter[]char[]、および java.lang.String が永続化されます。Blob では、java.sql.BlobByte[]byte[] 、およびシリアライズ可能なタイプが永続化されます。.
@Lob
public String getFullText() {
    return fullText;
}

@Lob 
public byte[] getFullCode() {
    return fullCode;
}
プロパティタイプが java.io.Serializable を実装し、基本的なタイプでない場合や、プロパティが @Lob でアノテートされない場合は、Hibernate の serializable タイプが使用されます。