JPA对数据库修改注意点

同一事务中获取不到修改数据

spring-boot-starter-parent版本2.7.12

Dao

@Query(value = "select * from inventory_list where id in (?1) order by id desc",nativeQuery = true)
List<InventoryListEntity> getByIds(List<Integer> idList);@Modifying
@Query(value = "update inventory_list set CLASSIFY_TYPE = ?2 where id in (?1)",nativeQuery = true)
void updateClassifyType(@Param(value = "ids") List<Integer> id,@Param(value = "classifyType") String classifyType);

Service

InventoryListService

public interface InventoryListService {List<InventoryListEntity> getByIds(List<Integer> idList);void updateClassifyType(List<Integer> idList, String classifyType);boolean updateClassifyTypeToE(List<Integer> idList);boolean updateClassifyTypeToI(List<Integer> idList);
}

UserService

public interface UserService {boolean updateClassifyType(List<Integer> idList);
}

ServiceImpl

InventoryListServiceImpl

@Component
public class InventoryListServiceImpl implements InventoryListService {private final Log log = LogFactory.getLog(this.getClass());Gson gson = new Gson();@Autowiredprivate InventoryListDao inventoryListDao;@Overridepublic void updateClassifyType(List<Integer> idList, String classifyType) {inventoryListDao.updateClassifyType(idList, classifyType);}@Overridepublic List<InventoryListEntity> getByIds(List<Integer> idList) {return inventoryListDao.getByIds(idList);}@Overridepublic boolean updateClassifyTypeToE(List<Integer> idList) {List<InventoryListEntity> entityList = getByIds(idList);if (entityList.size() < idList.size()){log.warn("存在未查到数据");return false;}for (InventoryListEntity entity : entityList) {log.info("? to E,classifyType: " + gson.toJson(entity.getClassifyType()));}updateClassifyType(idList, "E");return true;}@Overridepublic boolean updateClassifyTypeToI(List<Integer> idList) {List<InventoryListEntity> entityList = getByIds(idList);if (entityList.size() < idList.size()){log.warn("存在未查到数据");return false;}for (InventoryListEntity entity : entityList) {log.info("E to I,classifyType: " + gson.toJson(entity.getClassifyType()));if (!"E".equals(entity.getClassifyType())){return false;}}updateClassifyType(idList, "I");return true;}
}

UserServiceImpl

@Component
public class UserServiceImpl implements UserService {private final Log log = LogFactory.getLog(this.getClass());@Autowiredprivate InventoryListService inventoryListService;// 默认事务隔离级别@Override@Transactionalpublic boolean updateClassifyType(List<Integer> idList) {boolean flag1 = inventoryListService.updateClassifyTypeToE(idList);if (!flag1){return false;}log.info("updateClassifyTypeToE success");boolean flag2 = inventoryListService.updateClassifyTypeToI(idList);if (!flag2){log.info("updateClassifyTypeToE false");return false;}return true;}}

Controller

@RestController
public class JpaEntityController {@Autowiredprivate UserService userService;@PostMapping("/jpa/entity/test")public String jpaEntityTest(@RequestBody List<Integer> idList){boolean flag = userService.updateClassifyType(idList);if (flag){return "true";}return "false";}
}

请求结果日志

在这里插入图片描述
在这里插入图片描述

数据最终都会被改成之前第一次修改的状态
在这里插入图片描述
在这里插入图片描述

解决方式

将修改换成对entity实体的修改

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/259686.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数值计算方法(黄明游)】解线性代数方程组的迭代法(一):向量、矩阵范数与谱半径【理论到程序】

文章目录 一、向量、矩阵范数与谱半径1、向量范数a. 定义及性质补充解释范数差 b. 常见的向量范数 l 1 l_1 l1​、 l 2 l_2 l2​、 l ∞ l_\infty l∞​ 范数性质关系 2、矩阵范数a. 矩阵的范数b. 常见的矩阵范数相容范数算子范数 3、谱半径4、知识点总结1. 向量范数2. 矩阵范数…

Ubuntu下,数据库编程报错fatal error: mysql.h: No such file or directory 的处理方法

#include <iostream> #include <mysql.h>using namespace std;int main() {cout << "Hello MySQL" << endl;return 0; }编译报错&#xff1a; Build messages /usr/local/include/mysql/common.h|232|fatal error: mysql.h: No such file o…

深入了解Java 8日期时间新玩法:DateTimeFormatter与ZoneOffset的使用

推荐语 在这篇文章中&#xff0c;我们将深入探讨Java中的DateTimeFormatter和ZoneOffset类的功能和使用方法。这些类是在Java 8中引入的新的日期时间API的一部分&#xff0c;它们为我们提供了更灵活、更易用的日期和时间处理能力。尽管这些类在Java 8中已经出现&#xff0c;但…

kafka学习笔记--安装部署、简单操作

本文内容来自尚硅谷B站公开教学视频&#xff0c;仅做个人总结、学习、复习使用&#xff0c;任何对此文章的引用&#xff0c;应当说明源出处为尚硅谷&#xff0c;不得用于商业用途。 如有侵权、联系速删 视频教程链接&#xff1a;【尚硅谷】Kafka3.x教程&#xff08;从入门到调优…

【MySQL】MySQL的varchar字段最大长度是65535?

在MySQL建表sql里,我们经常会有定义字符串类型的需求。 CREATE TABLE `user` ( `name` varchar(100) NOT NULL DEFAULT COMMENT 名字) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ; 比方说user表里的名字,就是个字符串。MySQL里有两个类型比较适合这个场景。 char和varchar。…

CentOS 7.9安装宝塔面板,安装gitlab服务器

docker安装方式比较慢&#xff0c;安装包1.3GB 安装后启动很慢 docker logs q18qgztxdvozdv_gitlab-ce-gitlab-1 docker ps docker exec -it q18qgztxdvozdv_gitlab-ce-gitlab-1 sh cd /etc/gitlab cat initial_root_password 软件商店安装方式&#xff0c;失败了2023.12…

【HTML】解析垂直滚动轮播效果的HTML、CSS和JavaScript实现

解析垂直滚动轮播效果的HTML、CSS和JavaScript实现 在现代Web开发中&#xff0c;滚动轮播效果是网页设计中常见的交互元素之一。在本文中&#xff0c;我们将深入解析一段HTML、CSS和JavaScript的代码&#xff0c;实现了一个简单而高效的垂直滚动轮播效果。通过该代码&#xff…

电子眼+无人机构建平安城市视频防控监控方案

电子眼&#xff08;也称为监控摄像机&#xff09;可以通过安装在城市的不同角落&#xff0c;实时监控城市的各个地方。它们可以用于监测交通违法行为、监控公共场所的安全以及实时监测特定区域的活动情况。通过电子眼的应用&#xff0c;可以帮助警方及时发现并响应各类安全事件…

电子学会C/C++编程等级考试2021年09月(五级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:抓牛 农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式: 1、从X移动到X-1或X+1,每次移动花费一分钟 2、从X移动到2*X,每…

IntelliJ IDEA使用Eval Reset

文章目录 IntelliJ IDEA使用Eval Reset说明具体操作 IntelliJ IDEA使用Eval Reset 说明 操作系统&#xff1a;windows10 版本&#xff1a;2020.1 IntelliJ IDEA安装可查看&#xff1a;安装教程 具体操作 添加&#xff0c;输入网址 https://plugins.zhile.io然后搜索“IDE E…

浏览器提示不安全

当我们使用浏览器访问一个网站时&#xff0c;如果该网站使用的是HTTPS连接&#xff0c;那么浏览器会对其进行安全性的检查。其中一项重要的检查就是确认该网站是否拥有有效的SSL证书。然而&#xff0c;有时我们会在浏览器中看到“不安全”的警告&#xff0c;这通常是由于SSL证书…

docker学习(八、mysql8.2主从复制遇到的问题)

在我配置主从复制的时候&#xff0c;遇到了一直connecting的问题。 起初可能是我ip配置的不对&#xff0c;slave_io_running一直connecting。&#xff08;我的环境&#xff1a;windows中安装了wsl&#xff0c;是ubuntu环境的&#xff0c;在wsl中装了miniconda&#xff0c;mini…