3.2.2. 単純なプロパティのマッピング
3.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 で、時間の正確性は定義されません。時間データを扱う場合は、データベースで期待された正確性を定義できます。時間データは
DATE
、TIME
、または TIMESTAMP
の正確性 (つまり、実際の日付、時間のみ、またはその両方) を持つことができます。@Temporal
アノテーションを使用して微調整します。
@Lob
は、プロパティタイプに応じてプロパティを Blob または Clob に永続化することを指定します。Clob では、java.sql.Clob
、Character[]
、char[]
、および java.lang.String
が永続化されます。Blob では、java.sql.Blob
、Byte[]
、byte[]
、およびシリアライズ可能なタイプが永続化されます。.
@Lob public String getFullText() { return fullText; } @Lob public byte[] getFullCode() { return fullCode; }
プロパティタイプが
java.io.Serializable
を実装し、基本的なタイプでない場合や、プロパティが @Lob
でアノテートされない場合は、Hibernate の serializable
タイプが使用されます。