我怀疑哪个是用 @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 支持使用在每次更新时更新的乐观锁定版本字段。该字段可以是数字或时间戳值。建议使用数字值,因为数字值比时间戳。”
“如果表已经有最后更新的时间戳列,则经常使用时间戳锁定,这也是自动更新最后更新的列的便捷方法。时间戳版本值可能比数字版本更有用,因为它包含相关信息上次更新对象的时间。”
我的问题是:
最佳答案
首先,知道锁定用于管理并发事务。
1.分离你的顾虑。如果 lastupdated 字段是特定于业务模型的,它应该与您的版本控制字段分开 - 这是用于 - 版本控制。
2.Primitives 和 objects 通常映射到您的数据库作为相同的类型。除了默认情况下 Boolean 可以为 null 并且 boolean 为“不可为 null”这一事实。但是,明确地强制执行可空性。在这种情况下,您希望使用原语,因为版本字段不能为空。
整数或长整数比时间戳更好。 Hibernate recommends numeric versionig 并且它们不占用那么多空间。
使用这个,你应该没问题。
private long version;
@Version
public long getVersion() {
return version;
}
public void setVersion(long version) {
this.version = version;
}
关于jpa - 用于乐观锁定的 JPA 版本字段的最佳类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23722835/