可选的<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|."
/>
![1]() | column (可选 - 默认为属性名): 持有时间戳的字段名。 |
![2]() | name : 在持久化类中的JavaBeans风格的属性名, 其Java类型是 Date 或者 Timestamp 的。 |
![3]() | access (可选 - 默认是 property ): Hibernate用于访问属性值的策略。 |
![4]() | unsaved-value (可选 - 默认是null ): 用于标明某个实例时刚刚被实例化的(尚未保存)版本属性值,依靠这个值就可以把这种情况和 已经在先前的session中保存或装载的脱管(detached)实例区分开来。(undefined 指明使用标识属性值进行这种判断。) |
![5]() | source (可选 - 默认是 vm ): Hibernate如何才能获取到时间戳的值呢?从数据库,还是当前JVM?从数据库获取会带来一些负担,因为Hibernate必须访问数据库来获得“下一个值”,但是在集群环境中会更安全些。还要注意,并不是所有的Dialect(方言) 都支持获得数据库的当前时间戳的,而支持的数据库中又有一部分因为精度不足,用于锁定是不安全的(例如Oracle 8)。 |
![6]() | generated (可选 - 默认是 never ): 指出时间戳值是否实际上是由数据库生成的.请参阅第 5.6 节 “数据库生成属性(Generated Properties)”的讨论。 |
注意,<timestamp>
和<version type="timestamp">
是等价的。并且<timestamp source="db">
和<version type="dbtimestamp">
是等价的。