5.1.8. timestamp(オプション)

5.1.8. timestamp(オプション)

オプションの <timestamp> 要素は、テーブルがタイムスタンプデータを含むことを示します。これはバージョン付けの代わりの方法として用意されています。タイムスタンプはもともと楽観的ロックにおける安全性の低い実装です。しかしアプリケーションはタイムスタンプを異なる用途で使うこともあるかもしれません。

<timestamp
        column="timestamp_column"
        name="propertyName"
        access="field|property|ClassName"
        unsaved-value="null|undefined"
        source="vm|db"
        generated="never|always"
        node="element-name|@attribute-name|element/@attribute|."
/>

column(オプション - デフォルトはプロパティ名): タイムスタンプを保持するカラムの名前。

name : 永続クラスである Java の Date型または Timestamp 型 の、 JavaBeans スタイルプロパティの名前。

access (オプション - デフォルトは property ): Hibernate がプロパティの値にアクセスするために使用すべき戦略。

unsaved-value (オプション - デフォルトは null ): インスタンスが新しくインスタンス化された (セーブされていない)ことを示すバージョンプロパティの値。以前の Session でセーブまたはロードされた一時的なインスタンスと区別するために使われます。 ( undefined と指定すると、識別子プロパティの値が使われます。)

source (オプション - デフォルトは vm ): Hibernate はどこからタイムスタンプの値を取得するべきでしょうか?データベースからでしょうか、現在の JVM からでしょうか?データベースによるタイムスタンプは、 Hibernate が "次の値" を決定するためにデータベースをヒットしなければならないため、オーバヘッドを招きます。しかしクラスタ環境では JVM から取得するより安全です。データベースの現在のタイムスタンプの取得をサポートするすべての Dialect が知られているわけではないことに注意してください。また一方で、精密さを欠くために、ロックで使用するには安全でないものもあります (例えば Oracle 8 )。

generated (オプション - デフォルトは never ): このタイムスタンプのプロパティの値が、データベースによって生成されることを指定します。 項5.6. 「生成プロパティ」 生成プロパティを参照してください。

<timestamp><version type="timestamp"> と等価であることに注意してください。 <timestamp source="db"><version type="dbtimestamp"> と等価であることに注意してください。