gpt4 book ai didi

java - 如何在特定列上实现 hibernate 版本控制?

转载 作者:太空宇宙 更新时间:2023-11-04 09:38:17 26 4
gpt4 key购买 nike

我已经在表上实现了 Hibernate 版本控制,并且版本列随表上的任何更新而更新。

我的要求是在特定列上实现版本控制功能

create table test
(
id number primary key,
name varchar,
city varchar,
version number
)

在当前实现的版本中,列在更改名称或城市时递增,但是我希望版本仅在更改名称时递增。

最佳答案

这些是乐观锁类型:

public enum OptimisticLockType {
/**
* Perform no optimistic locking.
*/
NONE,
/**
* Perform optimistic locking using a dedicated version column.
*
* @see javax.persistence.Version
*/
VERSION,
/**
* Perform optimistic locking based on *dirty* fields as part of an expanded WHERE clause restriction for the
* UPDATE/DELETE SQL statement.
*/
DIRTY,
/**
* Perform optimistic locking based on *all* fields as part of an expanded WHERE clause restriction for the
* UPDATE/DELETE SQL statement.
*/
ALL
}

因此没有特定的列锁,但您可以实现自己的列锁。如您所知,当您拥有 @Version 乐观锁时,查询将如下所示:

UPDATE TEST SET NAME = ?, CITY = ? WHERE ID = ? AND VERSION = ?

此查询将确保您的实体的版本应与您读取的版本相同。所以现在您只想检查 name 列上的版本更改。所以你需要执行这样的查询:

UPDATE TEST SET NAME = ?, CITY = ? WHERE ID = ? AND NAME = ?

因此,您只需检查 name old value 是否为您之前读取的值。而且在此解决方案中,您不需要版本,并且可以从实体中省略版本。另外,不要忘记为 DELETE 查询实现此逻辑。

关于java - 如何在特定列上实现 hibernate 版本控制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56236722/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com