Java JPA@版本溢出
JPA规范(2.1)规定: 版本属性支持以下类型:int、Integer、short、short、long、long、TimestampJava JPA@版本溢出,java,jpa,jpa-2.0,Java,Jpa,Jpa 2.0,JPA规范(2.1)规定: 版本属性支持以下类型:int、Integer、short、short、long、long、Timestamp @Version属性溢出后的预期行为是什么?我希望它能正常工作。溢出和版本++!=版本如果您正在使用short,并且在第一个实体完成之前在此实体上有65536个更新事务,则会导致覆盖更新的风险 编辑:当您使用@Version时,更新查询将不会如下所示: update person set surname = ? where id = ? update per
@Version
属性溢出后的预期行为是什么?我希望它能正常工作。溢出和版本++!=版本如果您正在使用short,并且在第一个实体完成之前在此实体上有65536个更新事务,则会导致覆盖更新的风险
编辑:当您使用@Version时,更新查询将不会如下所示:
update person set surname = ? where id = ?
update person set surname = ?, version_field = ? where id = ? and version_field = ?
但就像这样:
update person set surname = ? where id = ?
update person set surname = ?, version_field = ? where id = ? and version_field = ?
现在JDBC将在完成时返回更新计数。如果没有进行更新,那么JPA实现将假定没有找到具有指定id和版本的数据->异常 我可以确认EasterBunybugsMasher在Hibernate 5上的回答。定义了一个byte@Version字段,一旦达到128,就转到-127并继续循环
(我没有评论的名声)我想这是一个学术问题,因为即使你每天有10亿次更新,也需要大约2500万年的时间来获得Long…的溢出。请注意,version属性可能是
short
,在这种情况下只需要32k次更新。为什么不试试,看看什么数据存储类型是“short”将创建,然后插入一个最短的+1。。。数据存储是否抛出SQLException?我不建议您自己设置@Version属性。为一些意外行为做好准备。那个版本>++版本不重要吗?你不需要确认任何人的答案。如果你有足够的代表性,你可以投票支持它。但你发布的内容(这不是答案)只会被否决和删除,对任何人都没有帮助。另外,我也不知道你为什么选择在三年前提出并回答的问题上这样做。他的回答以“我希望它能…”开头,只有+3,所以我必须在使用之前进行验证。我想节省别人的时间。当然,如果不受欢迎,我不会再这样做了。加博——这不是不受欢迎的问题。这就是StackOverflow的指导方针的设置方式。请注意,答案已被接受,正在验证它。而且,无论是提问者还是回答者,投票都是受欢迎的。而且只需要几个代表点(15)就可以拥有这种能力。