为什么我用save保存更新,数据库不更新,反而新增一条

今天发现一个奇怪的问题:

为什么我用save保存更新的数据后,数据库不更新,但是增加了一条空数据,我的前台也把数据用json传上去了,也成功了,但是数据库没有更新相应行的数据,而是新增了一条数据,我的后端用的接口PagingAndSortingRepository,数据库hibernate+sqlserver。

前端请求代码:

request(selectedRow,'post','<%=basePath%>userManager/save',function(data){console.log("data:"+data);
});

请求明细数据:

后端接口:

public interface UserManagerDAO extends PagingAndSortingRepository<User, Long>{
}

数据库显示:

我准备重现一下这个问题,下面的搭建过程和运行结果。

(Spring Data JPA入门案例,包含mysql、mssql增删改查、分页,主键自动生成)

1.环境准备

首先,确保你的Spring Boot项目已经配置了相关依赖。在pom.xml中加入以下依赖:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>mssql-jdbc</artifactId><version>7.4.1.jre8</version></dependency>
</dependencies>

2.应用配置

application.properties中配置数据库连接:

# 应用服务 WEB 访问端口
server.port=8080# spring.datasource.url=jdbc:mysql://localhost:3306/award?useSSL=false&serverTimezone=UTC
# spring.datasource.username=root
# spring.datasource.password=123456
# spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
# spring.jpa.hibernate.ddl-auto=update
# spring.jpa.show-sql=truespring.datasource.url=jdbc:sqlserver://127.0.0.1:1433;databaseName=award
spring.datasource.username=sa
spring.datasource.password=A123456
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriverspring.main.lazy-initialization=true

3.实体类 (Entity)

假设我们有一个用户(User)实体,主键自增。

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;@Entity(name = "users")
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String username;private String password;private String role;@Column(name = "addtime", insertable = false, updatable = false)private byte[] addtime;    // Getters and Setters
}

4.Repository 接口

Spring Data JPA会根据接口方法名自动生成查询语句。

import java.util.List;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;@Repository
public interface UserRepository extends PagingAndSortingRepository<User, Long> {List<User> findByUsername(String username);Page<User> findAll(Pageable pageable);
}

5.Service 层

服务层用于业务逻辑处理。

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;@Service
public class UserService {@Autowiredprivate UserRepository userRepository;public User save(User user) {return userRepository.save(user);}public void delete(User user) {userRepository.delete(user);}public User findById(Long id) {return userRepository.findById(id).orElse(null);}public List<User> findByName(String name) {return userRepository.findByUsername(name);}public Page<User> findAllPaged(int page, int size) {Pageable pageable = PageRequest.of(page, size);return userRepository.findAll(pageable);}public User update(Long id, User userDetails) {return userRepository.save(userDetails);}public boolean deleteById(Long id) {userRepository.deleteById(id);return true;}public Page<User> findAllPaged(Pageable pageable) {return userRepository.findAll(pageable);}
}

6.Controller 层

控制器负责接收HTTP请求并响应。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/api/users")
public class UserController {@Autowiredprivate UserService userService;// 创建(新增)@PostMappingpublic ResponseEntity<User> createUser(@RequestBody User user) {User savedUser = userService.save(user);return new ResponseEntity<>(savedUser, HttpStatus.CREATED);}// 查询(读取)@GetMapping("/{id}")public ResponseEntity<User> getUser(@PathVariable Long id) {User user = userService.findById(id);if (user != null) {return new ResponseEntity<>(user, HttpStatus.OK);} else {return new ResponseEntity<>(HttpStatus.NOT_FOUND);}}// 更新@PutMapping("/{id}")public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User userDetails) {User updatedUser = userService.update(id, userDetails);if (updatedUser != null) {return new ResponseEntity<>(updatedUser, HttpStatus.OK);} else {return new ResponseEntity<>(HttpStatus.NOT_FOUND);}}// 删除@DeleteMapping("/{id}")public ResponseEntity<Void> deleteUser(@PathVariable Long id) {boolean isDeleted = userService.deleteById(id);if (isDeleted) {return new ResponseEntity<>(HttpStatus.NO_CONTENT);} else {return new ResponseEntity<>(HttpStatus.NOT_FOUND);}}// 分页查询@GetMappingpublic ResponseEntity<Page<User>> getUsers(@RequestParam(defaultValue = "0") int page,@RequestParam(defaultValue = "10") int size) {Pageable pageable = PageRequest.of(page, size);Page<User> usersPage = userService.findAllPaged(pageable);return new ResponseEntity<>(usersPage, HttpStatus.OK);}
}

7.MySQL

建表语句

CREATE TABLE `users` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`username` VARCHAR(100) NOT NULL COMMENT '用户名',`password` VARCHAR(100) NOT NULL COMMENT '密码',`role` VARCHAR(100) NULL DEFAULT '管理员' COMMENT '角色',`addtime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新增时间',PRIMARY KEY (`id`)
) COMMENT='用户表' ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

8.MSSQL

建表语句

CREATE TABLE [dbo].[users]([id] [int] IDENTITY(1,1) NOT NULL,[username] [varchar](50) NOT NULL,[password] [varchar](50) NOT NULL,[role] [varchar](50) NULL,[addtime] [timestamp] NULL,CONSTRAINT [PK_users] PRIMARY KEY CLUSTERED 
([id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]GO

9.启动

成功启动

Tomcat started on port(s): 8080 (http)
Started JpademoApplication in 4.702 seconds (JVM running for 5.149)

10.新增用户

调用成功

11.查询用户

调用成功

12.修改用户

调用成功

所以,我没有重现这个问题,有可能是id传到后台的时候,丢失导致的,当所有可能都已经排除,那只剩这种可能了,网络数据丢包也会导致问题。

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

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

相关文章

SpringBoot前置知识02-spring注解发展史

springboot前置知识01-spring注解发展史 spring1.x spring配置只能通过xml配置文件的方式注入bean,需要根据业务分配配置文件&#xff0c;通过import标签关联。 spring1.2版本出现Transactional注解 <?xml version"1.0" encoding"UTF-8"?> <be…

实现顺序表各种基本运算的算法

实验一&#xff1a;实现顺序表各种基本运算的算法 一、实验目的与要求 目的: 领会顺序表存储结构和掌握顺序表中各种基本运算算法设计。 内容: 编写一个程序sqlist.cpp,实现顺序表的各种基本运算和整体建表算法(假设顺序表的元素类型ElemType为char),并在此基础上设计一个…

计组期末必考大题

一.寻址方式详解 1.直接寻址 指令地址码直接给到操作数所在的存储单元地址 2.间接寻址 A为操作数EA的地址 3.寄存寻址 4.寄存器间接寻址 5.变址寻址 6.基地址寻址 7.小结 二、指令周期详解 一、基本概念 指令周期:去除指令并执行指令所需要的时间指令周期:由若干个CPU周…

如何实现响应式设计

响应式设计&#xff08;Responsive Web Design, RWD&#xff09;是一种设计思路和技术实现方法&#xff0c;它使网站或应用程序能够适配不同大小屏幕和设备。以下是实现响应式设计的详细步骤&#xff1a; 确定设计目标&#xff1a; 首先&#xff0c;你需要明确你的设计目标&am…

C++/ cuda kernel中的模版元编程识别 kernel 模版的数据类型

1&#xff0c;模版元编程 模板元编程是一种利用 C 模板系统在编译时进行计算和生成代码的技术。其原理基于模板特化、递归、模板参数推导等特性&#xff0c;通过模板实例化和展开&#xff0c;在编译时生成代码&#xff0c;以实现在编译期间进行复杂计算和代码生成的目的。 2&am…

开发人员容易被骗的原因有很多,涉及技术、安全意识、社会工程学以及工作环境等方面。以下是一些常见原因:

技术方面&#xff1a; 漏洞和补丁管理不当&#xff1a;未及时更新软件和依赖库可能存在已知漏洞&#xff0c;容易被攻击者利用。缺乏安全编码实践&#xff1a;没有遵循安全编码规范&#xff0c;容易引入SQL注入、跨站脚本&#xff08;XSS&#xff09;等安全漏洞。错误配置&…

None和doctoring的秘密

None和doctoring的秘密 用None和docstring来描述默认值会变的参数 有时&#xff0c;我们想把那种不能够提前固定的值&#xff0c;当作关键字参数的默认值。例如&#xff0c;记录日志消息时&#xff0c;默认的时间应该是出发事件的那一刻。所以&#xff0c;如果调用者没有明确…

前端笔记-day07

学成在线网站 文章目录 效果图代码展示index.htmlindex.cssbase.css 效果图 代码展示 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-w…

vue-router 完整的导航流程解析

1、导航被触发 2、在失活的组件里调用 beforeRouteLeave 守卫 组件内守卫beforeRouteLeave&#xff1a;在离开该组件之前&#xff0c;会先调用它&#xff08;用于在离开组件前保存或清理一些状态&#xff09; import { onBeforeRouteLeave } from vue-routeronBeforeRouteLea…

键盘盲打是练出来的

键盘盲打是练出来的&#xff0c;那该如何练习呢&#xff1f;很简单&#xff0c;看着屏幕提示跟着练。屏幕上哪里有提示呢&#xff1f;请看我的截屏&#xff1a; 截屏下方有8个带字母的方块按钮&#xff0c;这个就是提示&#xff0c;也就是我们常说的8个基准键位&#xff0c;我…

spring boot多模块项目中父项目与子项目的连接

如题&#xff0c;spring boot多模块项目中&#xff0c;父项目在本级的pom.xml中&#xff0c;引入子项目&#xff0c;类似代码如下&#xff1a; ruoyi-modules/pom.xml&#xff1a; <modules><module>ruoyi-system</module><module>ruoyi-gen</modu…

【linux】详解vim编辑器

基本指令 【linux】详解linux基本指令-CSDN博客 【linux】详解linux基本指令-CSDN博客 vim的基本概念 vim有很多模式&#xff0c;小编只介绍三种就能让大家玩转vim了&#xff0c; 分别是&#xff1a; 正常/普通/命令模式 插入模式 末行/底行模式 命令模式 控制屏幕光标的…

【C++初阶】--- C++入门(上)

目录 一、C的背景及简要介绍1.1 什么是C1.2 C发展史1.3 C的重要性 二、C关键字三、命名空间2.1 命名空间定义2.2 命名空间使用 四、C输入 & 输出 一、C的背景及简要介绍 1.1 什么是C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&…

探索Linux中的神奇工具:探秘tail命令的妙用

探索Linux中的神奇工具&#xff1a;探秘tail命令的妙用 在Linux系统中&#xff0c;tail命令是一个强大的工具&#xff0c;用于查看文件的末尾内容。本文将详细介绍tail命令的基本用法和一些实用技巧&#xff0c;帮助读者更好地理解和运用这个命令。 了解tail命令 tail命令用…

Excel 下划线转驼峰

Excel 下划线转驼峰 LOWER(LEFT(SUBSTITUTE(PROER(A1),"_",""),1))&RIGHT(SUBSTITUTE(PROPER(A1),"_",""),LEN(SUBSTITUTE(PROPER(A1),"_",""))-1)

微博:一季度运营利润9.11亿元,经营效率持续提升

5月23日&#xff0c;微博发布2024年第一季度财报。一季度微博总营收3.955亿美元&#xff0c;约合28.44亿元人民币&#xff0c;超华尔街预期。其中&#xff0c;广告营收达到3.39亿美元&#xff0c;约合24.39亿元人民币。一季度调整后运营利润达到1.258亿美元&#xff0c;约合9.1…

【论文极速读】 LLava: 指令跟随的多模态大语言模型

【论文极速读】 LLava: 指令跟随的多模态大语言模型 FesianXu 20240331 at Tencent WeChat Search Team 前言 如何将已预训练好的大规模语言模型&#xff08;LLM&#xff09;和多模态模型&#xff08;如CLIP&#xff09;进行融合&#xff0c;形成一个多模态大语言模型&#xf…

【MATLAB】基于EMD-PCA-LSTM的回归预测模型

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 1 基本定义 基于EMD-PCA-LSTM的回归预测模型是一种结合了经验模态分解&#xff08;Empirical Mode Decomposition, EMD&#xff09;、主成分分析&#xff08;Principal Component Analysis, PCA&#xff09;和长短期记忆…

Arrays.asList()的问题记录

1、Arrays.asList() Arrays.asList()返回的是 public static <T> List<T> asList(T... a) {return new ArrayList<>(a);} private static class ArrayList<E> extends AbstractList<E>implements RandomAccess, java.io.Serializable 没有实现…

redis集群不允许操作多个key解决方案、redis key负载均衡方案

前提 在cluster redis 中进行同一个命令处理不同的key会报错:CROSSSLOT Keys in request dont hash to the same slot,例如: 此示例使用sdiff 命令对pool_1与pool_2进行diff操作。 那么我们在业务场景中就需要将集群redis中的不同key进行操作,我们该如何处理呢? 本次的…