<version> 要素はオプションであり、テーブルがバージョンデータを含むことを示します。これは ロングトランザクション を使うつもりなら、特に役立ちます(以下を参照してください)。
<version
column="version_column"
name="propertyName"
type="typename"
access="field|property|ClassName"
unsaved-value="null|negative|undefined"
generated="never|always"
insert="true|false"
node="element-name|@attribute-name|element/@attribute|."
/>
column (オプション - デフォルトはプロパティ名): バージョン番号を保持するカラムの名前。
name :永続クラスのプロパティの名前。
type (オプション - デフォルトは integer ):バージョン番号の型。
access (オプション - デフォルトは property ): Hibernate がプロパティの値にアクセスするために使用すべき戦略。
unsaved-value (オプション - デフォルトは undefined ): インスタンスが新しくインスタンス化されたことを示す (セーブされていないことを示す) バージョンプロパティの値。以前の Session でセーブまたはロードされた一時的なインスタンスと区別するために使います。 ( undefined は識別子プロパティの値が使われることを指定します。)
generated (オプション - デフォルトは never ): このバージョンのプロパティの値が、データベースによって生成されたことを指定します。項5.6. 「生成プロパティ」 生成プロパティの議論を参照してください。
insert (オプション - デフォルトは true ): SQLの insert 文にバージョンカラムを含めるべきかどうかを指定します。もしデータベースカラムのデフォルト値が 0 と定義されるときには、 false に設定すると良いでしょう。
バージョン番号は Hibernate の long 、 integer 、 short 、 timestamp 、 calendar 型のいずれかです。
バージョンやタイムスタンプのプロパティは、分離されたインスタンスに対して null であってはなりません。そのためどのような unsaved-value 戦略が指定されても、 Hibernate は null のバージョンやタイムスタンプを持ったすべてのインスタンスを、一時的なものであると判断します。 null を許容するバージョンやタイムスタンプのプロパティを定義することは、 Hibernate において過渡的に一時オブジェクトとすることを防ぐ簡単な方法です。特に識別子の割り当てや複合キーを使用しているときには特に有用です。