为什么在 Hibernate 中版本号由 db 控制时,成功更新后需要额外的 SQL 查询?

Why an extra SQL query is needed after a successful update when version number controlled by db in Hibernate?

我正在阅读 this article 我不明白为什么当我们在 Hibernate 中将版本控制数据控制委托给数据库时,在成功更新后,需要另一个 SQL 查询来检索从数据库返回的版本号。

例子来了。我们有一个名为 Product 的实体。

这是映射配置:

<hibernate-mapping package=”example”>
<class name=”Product”>
<id name=”id”>
  <generator class=”native” />
</id>
<version name=”version” type=”long” generated=”always”/>
<property name=”name” not-null=”true” />
</class>
</hibernate-mapping>

这些是更新产品后生成的查询:

Hibernate:
/* update example.Product */ 
update Product
set
 name=?
where
 id=?
 and version=?

Hibernate:
/* get generated state example.Product */ 
select product_.version as version8_
from
 Product product_
where
 product_.id=?

我知道为什么需要版本控制,但我不明白的是为什么我们更新产品后要检索版本号 ...

额外的查询是必要的,因为休眠需要知道新的版本值。否则缓存的休眠实体需要失效。 当hibernate自己处理版本时,新值是已知的,所以不需要额外查询数据库。