首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring和JPA Hibernate 5.0.3执行两次相同的更新查询,第一次使用更新值,然后使用旧值

Spring是一个开源的Java开发框架,它提供了一种简化Java开发的方式。它的核心特性包括依赖注入(DI)和面向切面编程(AOP)。Spring框架可以帮助开发人员构建可扩展、模块化和易于测试的应用程序。

JPA(Java Persistence API)是Java持久化规范的一部分,它提供了一种标准的方式来管理Java对象与关系数据库之间的映射。Hibernate是一个流行的JPA实现,它提供了一种简化数据库访问的方式。

当执行两次相同的更新查询时,第一次使用更新值,然后使用旧值,可以通过以下步骤实现:

  1. 首先,使用Spring的依赖注入功能将JPA和Hibernate集成到项目中。可以使用Maven或Gradle等构建工具来管理依赖。
  2. 创建一个实体类,用于映射数据库表。在实体类中,使用注解来定义属性与数据库列之间的映射关系。
  3. 创建一个Repository接口,继承自JpaRepository或CrudRepository。这个接口将提供基本的CRUD操作方法。
  4. 在Service或Controller层中,注入Repository接口,并使用@Transactional注解来管理事务。
  5. 在更新操作之前,先执行一次查询,获取旧值。可以使用Repository接口提供的查询方法来实现。
  6. 使用获取到的旧值进行更新操作。可以使用Repository接口提供的更新方法来实现。
  7. 最后,再执行一次查询,确保更新操作已生效。

这种方式可以确保在更新操作中使用旧值,并且使用Spring和Hibernate的事务管理功能,保证数据的一致性和完整性。

关于Spring和JPA Hibernate的更多信息,可以参考以下链接:

  1. Spring官方网站:https://spring.io/
  2. JPA官方文档:https://docs.oracle.com/javaee/7/tutorial/partpersist.htm
  3. Hibernate官方网站:https://hibernate.org/
  4. Spring Data JPA官方文档:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/
  5. Spring事务管理官方文档:https://docs.spring.io/spring-framework/docs/current/reference/html/data-access.html#transaction
  6. Hibernate事务管理官方文档:https://docs.jboss.org/hibernate/orm/5.5/userguide/html_single/Hibernate_User_Guide.html#transactions
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【快学springboot】7.使用Spring Boot Jpa

Spring Data JPA Spring Data JPASpring 基于 ORM(hibernate) 框架、Jpa 规范基础上封装一套 Jpa 应用框架,按照约定好【方法命名规则】写数据库...InnoDBD show-sql 是否打印出自动生成 SQL,方便调试时候查看 spring.jpa.hibernate.ddl-auto参数作用主要用于:自动创建更新验证数据库表结构,有五个...create: 每次加载 hibernate 时都会删除上一次生成表,然后根据你 model 类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失一个重要原因。...update:最常用属性,第一次加载 hibernate 时根据 model 类会自动建立起表结构(前提是先建立好数据库),以后加载 hibernate 时根据 model 类自动更新表结构,即使表结构改变了但表中行仍然存在不会删除以前行...Column注解来定义一些数据库表结构东西,如果不使用,会自动使用驼峰命名规则映射默认

3.3K40

【快学springboot】7.使用Spring Boot Jpa

Spring Data JPA Spring Data JPASpring 基于 ORM(hibernate) 框架、Jpa 规范基础上封装一套 Jpa 应用框架,按照约定好【方法命名规则】写数据库...InnoDBD show-sql 是否打印出自动生成 SQL,方便调试时候查看 spring.jpa.hibernate.ddl-auto参数作用主要用于:自动创建更新验证数据库表结构,有五个...create: 每次加载 hibernate 时都会删除上一次生成表,然后根据你 model 类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失一个重要原因。...update:最常用属性,第一次加载 hibernate 时根据 model 类会自动建立起表结构(前提是先建立好数据库),以后加载 hibernate 时根据 model 类自动更新表结构,即使表结构改变了但表中行仍然存在不会删除以前行...Column注解来定义一些数据库表结构东西,如果不使用,会自动使用驼峰命名规则映射默认

16110

spring boot 中使用 jpa以及jpa介绍

大家好,又见面了,我是你们朋友全栈君。 最近在项目中使用了一下jpa,发现还是挺好用。这里就来讲一下jpa以及在spring boot中使用。 在这里我们先来了解一下jpa。...2.3简单方便 JPA主要目标之一就是提供更加简单编程模型:在JPA框架下创建实体创建Java 类一样简单,没有任何约束限制,只需要使用 javax.persistence.Entity进行注释...2.4查询能力 JPA查询语言是面向对象而非面向数据库,它以面向对象自然语法构造查询语句,可以看成是Hibernate HQL等价物。...该参数几种配置如下: ·create:每次加载hibernate时都会删除上一次生成表,然后根据你model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失一个重要原因...·update:最常用属性,第一次加载hibernate时根据model类会自动建立起表结构(前提是先建立好数据库),以后加载hibernate时根据model类自动更新表结构,即使表结构改变了但表中行仍然存在不会删除以前

3.8K10

Spring Boot 最佳实践(五)Spring Data JPA 操作 MySQL 8

时都会删除上一次生成表,然后根据你 model 类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失一个重要原因。...[没表-创建-操作 | 有表-更新没有的属性列-操作] validate:每次加载 hibernate 时,验证创建数据库表结构,只会和数据库中表进行比较,不会创建新表,但是会插入新。.../ 查询单条 Repository.findAll(pageable); // 带排序分页查询列表 Repository.saveState(1, 0); // 更新单个字段 这些方法,可以不写一行代码就可以实现对一个表操作...包,而不是javax.transaction. 3.2 根据名称自动生成SQL JPA支持根据简单关键字自动生成Sql查询方法,比如根据nameage组合查询,代码如下: public User...四、常见错误 在 Spring Data JPA 使用当中,可能会遇到如下一些错误。

3.5K40

Spring Boot 最佳实践(五)Spring Data JPA 操作 MySQL 8

时都会删除上一次生成表,然后根据你 model 类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失一个重要原因。...没表-创建-操作 | 有表-更新没有的属性列-操作 validate:每次加载 hibernate 时,验证创建数据库表结构,只会和数据库中表进行比较,不会创建新表,但是会插入新。.../ 查询单条 Repository.findAll(pageable); // 带排序分页查询列表 Repository.saveState(1, 0); // 更新单个字段 这些方法,可以不写一行代码就可以实现对一个表操作...包,而不是javax.transaction. 3.2 根据名称自动生成SQL JPA支持根据简单关键字自动生成Sql查询方法,比如根据nameage组合查询,代码如下: public User...四、常见错误 在 Spring Data JPA 使用当中,可能会遇到如下一些错误。

3.7K20

SpringBoot开发案例之整合Spring-data-jpa

如何使用JPA 查询 查询所有数据 findAll() 分页查询 findAll(new PageRequest(0, 2)) 根据id查询 findOne() 根据实体类属性查询: findByProperty...count() 或者 根据某个属性查询总数countByAge(int age); 是否存在某个id exists() 修改,删除,新增 新增:直接使用 save(T) 方法 删除: delete...spring.jpa.properties.hibernate.hbm2ddl.auto是hibernate配置属性,其主要作用是:自动创建、更新、验证数据库表结构。...该参数几种配置如下: create:每次加载hibernate时都会删除上一次生成表,然后根据你model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失一个重要原因...update:最常用属性,第一次加载hibernate时根据model类会自动建立起表结构(前提是先建立好数据库),以后加载hibernate时根据model类自动更新表结构,即使表结构改变了但表中行仍然存在不会删除以前

1.4K40

SpringBoot开发案例之整合Spring-data-jpa

如何使用JPA 查询 查询所有数据 findAll() 分页查询 findAll(new PageRequest(0, 2)) 根据id查询 findOne() 根据实体类属性查询...count() 或者 根据某个属性查询总数countByAge(int age); 是否存在某个id exists() 修改,删除,新增 新增:直接使用 save(T) 方法 删除: delete...spring.jpa.properties.hibernate.hbm2ddl.auto是hibernate配置属性,其主要作用是:自动创建、更新、验证数据库表结构。...该参数几种配置如下: create:每次加载hibernate时都会删除上一次生成表,然后根据你model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失一个重要原因...update:最常用属性,第一次加载hibernate时根据model类会自动建立起表结构(前提是先建立好数据库),以后加载hibernate时根据model类自动更新表结构,即使表结构改变了但表中行仍然存在不会删除以前

3.2K80

Spring Boot 2.x 引起一个线上低级问题

然后,协助开发一起排查了一下午,最后经过不懈努力一探到底摸索精神最终查明不是KLock锁问题,问题出在Spring Data JpaOpen-EntityManager-in-view这个配置上...,最后在用id查询出来更新这个account,业务流程如下: 请求一:查询id =6记录,此时JpaVersion =6,业务处理,再次查询id =6记录,JpaVersion =6,然后更新数据提交...请求二:查询id =6记录,此时JpaVersion =6, 业务处理,此时请求一结束了,再次查询id=6记录,JpaVersion =6,更新数据提交失败 首先,请求一请求二是模拟并发请求,...解决方案 真实原因已经定位到了,给出了几种方案解决问题,如下: 方案一、将KLock前置,把加分布式锁逻辑移到第一次使用id查询之前,即让查询发生在别的请求事务结束之前,这样无论第一次查询还是第二次查询获取到都是别的事务已提交内容...然后一不小心就会陷进Session缓存坑里。所以,新项目就直接去掉吧,老项目去掉后回归验证下 结语 因为对业务不熟悉,不知道业务逻辑中查询两次相同实体,导致整个排错过程比较曲折。

1.6K40

Spring Boot中建议关闭Open-EntityManager-in-view

然后,协助开发一起排查了一下午,最后经过不懈努力一探到底摸索精神最终查明不是KLock锁问题,问题出在Spring Data JpaOpen-EntityManager-in-view这个配置上...,最后在用id查询出来更新这个account,业务流程如下: 请求一:查询id =6记录,此时JpaVersion =6,业务处理,再次查询id =6记录,JpaVersion =6,然后更新数据提交...请求二:查询id =6记录,此时JpaVersion =6, 业务处理,此时请求一结束了,再次查询id=6记录,JpaVersion =6,更新数据提交失败 首先,请求一请求二是模拟并发请求,...解决方案 真实原因已经定位到了,KL博主给出了几种方案解决问题,如下: 方案一、将KLock前置,把加分布式锁逻辑移到第一次使用id查询之前,即让查询发生在别的请求事务结束之前,这样无论第一次查询还是第二次查询获取到都是别的事务已提交内容...然后一不小心就会陷进Session缓存坑里。所以,新项目就直接去掉吧,老项目去掉后回归验证下 结语 因为对业务不熟悉,不知道业务逻辑中查询两次相同实体,导致整个排错过程比较曲折。

17430

干货|一文读懂 Spring Data Jpa

JPAHibernate关系 JPAHibernate 一个抽象(就像JDBCJDBC驱动关系); JPA 是规范:JPA 本质上就是一种 ORM 规范,不是ORM 框架,这是因为 JPA...Spring Data Spring Data 是 Spring 一个子项目。用于简化数据库访问,支持NoSQL 关系数据存储。其主要目标是使数据库访问变得方便快捷。...主角故事 Jpa 故事 为了让大伙彻底把这两个东西学会,这里我就先来介绍单纯Jpa使用然后我们再结合 Spring Data 来看 Jpa如何使用。...@Id注解表示这个字段是一个id,@GeneratedValue注解表示主键自增长策略,对于类中其他属性,默认都会根据属性名在表中生成相应字段,字段名属性名相同,如果开发者想要对字段进行定制,可以使用...注意: JPQL 不支持使用 INSERT 方法返回应该是 int,表示更新语句所影响行数 在调用地方必须加事务,没有事务不能正常执行 默认情况下, Spring Data 每个方法上有事务,

2.8K20

ORM Spring Data Jpa

6、根据读取到数据,按特定业务逻辑进行计算。 7、根据计算得到结果再组装更新 SQL 语句。 8、再使用 Connection 对象执行更新 SQL 语句,以更新数据库中数据。...JPAHibernate关系 JPAHibernate 一个抽象(就像JDBCJDBC驱动关系); JPA 是规范:JPA 本质上就是一种 ORM 规范,不是ORM 框架,这是因为...Spring Data Spring Data 是 Spring 一个子项目。用于简化数据库访问,支持NoSQL 关系数据存储。其主要目标是使数据库访问变得方便快捷。...主角故事 Jpa 故事 为了让大伙彻底把这两个东西学会,这里我就先来介绍单纯Jpa使用然后我们再结合 Spring Data 来看 Jpa如何使用。...注意: JPQL 不支持使用 INSERT 方法返回应该是 int,表示更新语句所影响行数 在调用地方必须加事务,没有事务不能正常执行 默认情况下, Spring Data 每个方法上有事务

3.3K30

Spring Boot2 系列教程(二十三)理解 Spring Data Jpa

1.1.2 JPA Hibernate 关系 JPAHibernate 一个抽象(就像 JDBC JDBC 驱动关系); JPA 是规范:JPA 本质上就是一种 ORM 规范,不是...可媲美JDBC查询能力: JPA查询语言是面向对象JPA 定义了独特JPQL,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供高级查询特性...1.2 Spring Data Spring Data 是 Spring 一个子项目。用于简化数据库访问,支持NoSQL 关系数据存储。其主要目标是使数据库访问变得方便快捷。...主角故事 2.1 Jpa 故事 为了让大伙彻底把这两个东西学会,这里我就先来介绍单纯 Jpa 使用然后我们再结合 Spring Data 来看 Jpa 如何使用。...注意: JPQL 不支持使用 INSERT 方法返回应该是 int,表示更新语句所影响行数 在调用地方必须加事务,没有事务不能正常执行 默认情况下, Spring Data 每个方法上有事务,

2K10

第十五节:SpringBoot使用JPA访问数据库

这些也是一些现在市面上常用ORM一些约定俗成注解了。 Spring Data JPASpring基于Hibernate开发一个JPA框架。...=classpath:/ddl/user-book-data.sql spring.jpa.hibernate.ddl-auto 是否根据实体类更新数据库,有四个属性 属性 作用 create 每次加载...hibernate时都会删除上一次生成表,然后根据你model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失一个重要原因。...update 最常用属性,第一次加载hibernate时根据model类会自动建立起表结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中行仍然存在不会删除以前行...spring.sql.init.mode 是否使用sql文件初始化数据库,有3个 属性 作用 ALWAYS 始终初始化数据库。

68620

第十五节:SpringBoot使用JPA访问数据库

Spring Data JPASpring基于Hibernate开发一个JPA框架。可以极大简化JPA写法,可以在几乎不用写具体代码情况下,实现对资料访问操作。...=classpath:/ddl/user-book-data.sql spring.jpa.hibernate.ddl-auto 是否根据实体类更新数据库,有四个属性 属性 作用 create 每次加载...hibernate时都会删除上一次生成表,然后根据你model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失一个重要原因。...update 最常用属性,第一次加载hibernate时根据model类会自动建立起表结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中行仍然存在不会删除以前行...spring.sql.init.mode 是否使用sql文件初始化数据库,有3个 属性 作用 ALWAYS 始终初始化数据库。 EMBEDDED 仅初始化嵌入式数据库。

74520

springboot之Web综合开发

Jpa 是利用 Hibernate 生成各种自动化 sql,如果只是简单增删改查,基本上不用手写了,Spring 内部已经帮大家封装实现了。...=com.mysql.jdbc.Driver spring.jpa.properties.hibernate.hbm2ddl.auto=update spring.jpa.properties.hibernate.dialect...=org.hibernate.dialect.MySQL5InnoDBDialect spring.jpa.show-sql= true 其实这个 hibernate.hbm2ddl.auto 参数作用主要用于...:自动创建 更新 验证数据库表结构,有四个: create: 每次加载 hibernate 时都会删除上一次生成表,然后根据你 model 类再重新来生成新表,哪怕两次没有任何改变也要这样执行...update:最常用属性,第一次加载 hibernate 时根据 model 类会自动建立起表结构(前提是先建立好数据库),以后加载 hibernate 时根据 model 类自动更新表结构,即使表结构改变了但表中行仍然存在不会删除以前

1.8K10

Spring Boot 与 Kotlin使用Spring-data-jpa简化数据访问层

由于Spring-data-jpa依赖于Hibernate。如果您对Hibernate有一定了解,下面内容可以毫不费力看懂并上手使用Spring-data-jpa。...如果您还是Hibernate新手,您可以先按如下方式入门,再建议回头学习一下Hibernate以帮助这部分理解进一步使用。..." 如果使用jpa必须增加 kotlin-jpa插件 kotlin-spring插件一样,kotlin-jpa是一个包含在no-arg之上插件。...该参数几种配置如下: create:每次加载hibernate时都会删除上一次生成表,然后根据你model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失一个重要原因...update:最常用属性,第一次加载hibernate时根据model类会自动建立起表结构(前提是先建立好数据库),以后加载hibernate时根据model类自动更新表结构,即使表结构改变了但表中行仍然存在不会删除以前

3.5K40

Spring Boot (十三): Spring Boot 小技巧

一些 Spring Boot 小技巧、小知识点 初始化数据 我们在做测试时候经常需要初始化导入一些数据,如何来处理呢?会有两种选择,一种是使用 Jpa,另外一种是 Spring JDBC 。...使用 Jpa使用 spring boot jpa情况下设置 spring.jpa.hibernate.ddl-auto属性设置为 create or create-drop时候,Spring...ddl-auto 四个解释 create:每次加载hibernate时都会删除上一次生成表,然后根据你model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失一个重要原因...update:最常用属性,第一次加载hibernate时根据model类会自动建立起表结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中行仍然存在不会删除以前行...validate :每次加载hibernate时,验证创建数据库表结构,只会和数据库中表进行比较,不会创建新表,但是会插入新。5、 none : 什么都不做。

1.2K20

走进Java接口测试之持久层框架Spring-data-jpa

Spring-data-jpa Spring-data-jpaSpring 基于 ORM 框架、 JPA 规范基础上封装一套JPA应用框架,可使开发者用极简代码即可实现对数据访问操作。...spring data jpa让我们解脱了DAO层操作,基本上所有CRUD都可以依赖于它来实现 Spring-data-jpa使用 基本查询 基本查询分为两种: spring data默认已经实现 根据查询方法来自动解析成...: 8888 servlet: context-path: /springboot jpa.hibernate.ddl.auto是 hibernate配置属性,其主要作用是:自动创建、更新...该参数几种配置如下: create:每次加载 hibernate 时都会删除上一次生成表,然后根据你model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失一个重要原因...update:最常用属性,第一次加载 hibernate时根据 Entity 类会自动建立起表结构(前提是先建立好数据库),以后加载 hibernate时根据 model类自动更新表结构,即使表结构改变了但表中行仍然存在不会删除以前

2.5K20

springboot(十三):springboot小技巧

一些springboot小技巧、小知识点 初始化数据 我们在做测试时候经常需要初始化导入一些数据,如何来处理呢?会有两种选择,一种是使用Jpa,另外一种是Spring JDBC。...使用Jpa使用 spring boot jpa情况下设置 spring.jpa.hibernate.ddl-auto属性设置为 create or create-drop时候,spring boot...:设置脚本编码 spring boot项目启动时候会自动执行脚本。...ddl-auto 四个解释 create: 每次加载hibernate时都会删除上一次生成表,然后根据你model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失一个重要原因...update:最常用属性,第一次加载hibernate时根据model类会自动建立起表结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中行仍然存在不会删除以前

1.2K100

芋道 Spring Boot JPA 入门(一)之快速入门

也因此,在我们使用 Spring Data JPA 项目中,如果想要替换底层使用 JPA 实现框架,在未使用到相关 JPA 实现框架特殊特性情况下,可以透明替换。...当然,绝大多数情况下,我们使用 JPA 实现框架是 Hibernate ORM 。...本小节,我们会使用 spring-boot-starter-data-jpa 自动化配置 Spring Data JPA 。同时,演示 Spring Data JPA CRUD 操作。...create :每次加载 hibernate 时都会删除上一次生成表,然后根据你 model 类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失一个重要原因。...update :最常用属性,第一次加载 hibernate 时根据 model 类会自动建立起表结构(前提是先建立好数据库),以后加载 hibernate 时根据 model 类自动更新表结构,即使表结构改变了但表中行仍然存在不会删除以前

1.5K20
领券