企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 5.1.7\. 版本(version)(可选) `&lt;version&gt;`元素是可选的,表明表中包含附带版本信息的数据。 这在你准备使用 _长事务(long transactions)_的时候特别有用。(见后) ``` <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|." /> ``` | ![1](https://box.kancloud.cn/2015-10-12_561bcb76795ae.png) | `column` (可选 - 默认为属性名): 指定持有版本号的字段名。 | |:--- |:--- | | ![2](https://box.kancloud.cn/2015-10-12_561bcb768596e.png) | `name`: 持久化类的属性名。 | | ![3](https://box.kancloud.cn/2015-10-12_561bcb94ee26f.png) | `type` (可选 - 默认是 `integer`): 版本号的类型。 | | ![4](https://box.kancloud.cn/2015-10-12_561bcb9508b82.png) | `access` (可选 - 默认是 `property`): Hibernate用于访问属性值的策略。 | | ![5](https://box.kancloud.cn/2015-10-12_561bcb95133e7.png) | `unsaved-value` (可选 - 默认是`undefined`): 用于标明某个实例时刚刚被实例化的(尚未保存)版本属性值,依靠这个值就可以把这种情况 和已经在先前的session中保存或装载的脱管(detached)实例区分开来。 (`undefined`指明应被使用的标识属性值。) | | ![6](https://box.kancloud.cn/2016-01-06_568cdb4f32753.png) | `generated` (可选 - 默认是 `never`): 表明此版本属性值是否实际上是由数据库生成的。请参阅[第 5.6 节 “数据库生成属性(Generated Properties)”](../Text/pr01_split_000.html "5.6\. 数据库生成属性(Generated Properties)")部分的讨论。 | | ![7](https://box.kancloud.cn/2016-01-06_568cdb4f41fcc.png) | `insert` (可选 - 默认是 `true`): 表明此版本列应该包含在SQL插入语句中。只有当数据库字段有默认值`0`的时候,才可以设置为`false`。 | 版本号必须是以下类型:`long`, `integer`, `short`, `timestamp`或者`calendar`。 一个脱管(detached)实例的version或timestamp属性不能为空(null),因为Hibernate不管 `unsaved-value`被指定为何种策略,它将任何属性为空的version或timestamp 实例看作为瞬时(transient)实例。 _避免Hibernate中的传递重附(transitive reattachment)问题的一个简单方法是 定义一个不能为空的version或timestamp属性,特别是在人们使用程序分配的标识符(assigned identifiers) 或复合主键时非常有用!_