通过Spring Data JPA执行批量更新时@Version字段未更新

 残血死少爷y_905 发布于 2023-01-29 11:46

我正在使用弹簧数据存储库,我有一个问题,我无法找到答案.我的存储库查询是:

@Modifying
@Query("UPDATE User u SET u.firstName = 'blabla' WHERE u.loginName = 'admin'")
public int test();

该实体User有一个带javax.persistence.Version注释的字段:

 @Version
 private Long version;

当我执行查询时,版本字段不会更新,但如果不是我执行的查询:

User user = this.userRepository.findUserById(1L);
user.setFirstName("blabla");
this.userRepository.save(user);

版本字段已更新.为什么?

1 个回答
  • JPA 2.0规范的4.10节明确指出:

    批量更新直接映射到数据库更新操作,绕过乐观锁定检查.如果需要,便携式应用程序必须手动更新版本列的值,和/或手动验证版本列的值.

    一般而言,批量更新和删除几乎绕过了持久性提供程序应用的许多功能,您可能在简单地保存实体时使用这些功能.除了乐观锁定之外,还包括持久性提供程序管理的持久性操作级联.

    2023-01-29 11:48 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有