【发布时间】:2014-07-06 12:47:46
【问题描述】:
对于使用 @Version 注释的字段在 JPA 中进行乐观锁定,哪种类型是最佳类型存在疑问。
API javadoc (http://docs.oracle.com/javaee/7/api/javax/persistence/Version.html) 说:
“版本属性支持以下类型:int、Integer、short、Short、long、Long、java.sql.Timestamp。”
在其他页面 (http://en.wikibooks.org/wiki/Java_Persistence/Locking#Optimistic_Locking) 说:
"JPA 支持使用乐观锁定版本字段,该字段在每次更新时都会更新。该字段可以是数字或时间戳值。建议使用数字值,因为数字值更精确、可移植、高性能且更易于处理比时间戳。”
“如果表已经有最后更新的时间戳列,则经常使用时间戳锁定,这也是自动更新最后更新的列的便捷方式。时间戳版本值可能比数字版本更有用,因为它包括对象上次更新时间的相关信息。”
我的问题是:
如果您要拥有一个 lastUpdated 字段,最好使用 Timestamp 类型,还是最好使用数字版本字段和其他字段中的时间戳?
在数值类型(int、Integer、short、Short、long、Long)之间最好选择哪个(考虑每种类型的长度)?我的意思是,我认为最好的是 Long,但每行需要很大的空间。
当版本字段到达数字类型的最后一个数字(例如,短字段中的 32,767)时会发生什么?在下一个增量中会再次从 1 开始吗?
【问题讨论】: