多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 5.1.8\. timestamp (可选) 可选的`&lt;timestamp&gt;`元素指明了表中包含时间戳数据。 这用来作为版本的替代。时间戳本质上是一种对乐观锁定的一种不是特别安全的实现。当然, 有时候应用程序可能在其他方面使用时间戳。 ``` <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|." /> ``` | ![1](https://box.kancloud.cn/2015-10-12_561bcb76795ae.png) | `column` (可选 - 默认为属性名): 持有时间戳的字段名。 | |:--- |:--- | | ![2](https://box.kancloud.cn/2015-10-12_561bcb768596e.png) | `name`: 在持久化类中的JavaBeans风格的属性名, 其Java类型是 `Date` 或者 `Timestamp`的。 | | ![3](https://box.kancloud.cn/2015-10-12_561bcb94ee26f.png) | `access` (可选 - 默认是 `property`): Hibernate用于访问属性值的策略。 | | ![4](https://box.kancloud.cn/2015-10-12_561bcb9508b82.png) | `unsaved-value` (可选 - 默认是`null`): 用于标明某个实例时刚刚被实例化的(尚未保存)版本属性值,依靠这个值就可以把这种情况和 已经在先前的session中保存或装载的脱管(detached)实例区分开来。(`undefined` 指明使用标识属性值进行这种判断。) | | ![5](https://box.kancloud.cn/2015-10-12_561bcb95133e7.png) | `source` (可选 - 默认是 `vm`): Hibernate如何才能获取到时间戳的值呢?从数据库,还是当前JVM?从数据库获取会带来一些负担,因为Hibernate必须访问数据库来获得“下一个值”,但是在集群环境中会更安全些。还要注意,并不是所有的`Dialect(方言)`都支持获得数据库的当前时间戳的,而支持的数据库中又有一部分因为精度不足,用于锁定是不安全的(例如Oracle 8)。 | | ![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)")的讨论。 | 注意,`&lt;timestamp&gt;` 和`&lt;version type="timestamp"&gt;`是等价的。并且`&lt;timestamp source="db"&gt;`和`&lt;version type="dbtimestamp"&gt;`是等价的。