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

SpringBoot系列教程JPA之指定id保存

原文链接: 191119-SpringBoot系列教程JPA之指定id保存 前几天有位小伙伴问了一个很有意思问题,使用 JPA 保存数据时,即便我指定了主键 id,但是新插入数据主键却是 mysql...Insert 教程 首先简单看一下,我们一般使用默认数据库自增生成主键使用方式,以便后面的自定义主键生成策略对比 对于 jpa 插入数据知识点不太清楚同学,可以看一下之前博文: 190614...) 大胆猜测,save 执行过程逻辑如 首先根据 id 到数据库中查询对应数据 如果数据不存在,则新增(插入 sql 指定 id) 如果数据存在,则判断是否有变更,以确定是否需要更新 2....,官方提供了四种 取值 说明 GenerationType.TABLE 使用一个特定数据库表格来保存主键 GenerationType.SEQUENCE 根据底层数据库序列来生成主键,条件是数据库支持序列...,因为没有 id,所以插入 sql 中也没有指定 id使用 mysql 自增来生成主键 id

2.9K50

SpringDataJPA 系列之 JPA 简介

1.2 JPA 简介 1.2.1 概述   我们都知道不同数据库厂商都有自己实现类,后来统一规范也就有了数据库驱动, Java 在操作数据库时候,底层使用其实是 JDBC, JDBC 是一组操作不同数据库规范...☞ 高级特性   JPA 中能够支持面向对象高级特性,如类之间继承、多态和类之间复杂关系,这样支持能够让开发者最大限度使用面向对象模型设计企业应用,不需要自行处理这些特性在关系数据库持久化...答案是否定,也就是说,如果使用 JPA 规范进行数据库操作,底层需要 hibernate 作为其实现类完成数据持久化工作。 ?...注解 ☞ 常用注解 注解 说明 属性 @Entity 指定当前类是实体类 @Table 指定实体类和表之间对应关系,指定则默认表名为类名全小写 name:指定数据库表名称 @Id 指定当前字段是主键...JPA 提供四种标准用法:  ♞ IDENTITY:主键由数据库自动生成(主要是自动增长型)  ♞ SEQUENCE:根据底层数据库序列来生成主键,条件是数据库支持序列

4.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

理解JPA注解@GeneratedValue

一、JPA通用策略生成器 通过annotation来映射hibernate实体,基于annotationhibernate主键标识为@Id, 其生成规则由@GeneratedValue设定.这里...@id和@GeneratedValue都是JPA标准用法, JPA提供四种标准用法,由@GeneratedValue源代码可以明显看出....TABLE:使用一个特定数据库表格来保存主键。 SEQUENCE:根据底层数据库序列来生成主键,条件是数据库支持序列。...assigned: 在插入数据时候主键由程序处理(即程序员手动指定),这是 元素没有指定时默认生成策略。等同于JPAAUTO。...increment: 插入数据时候hibernate会给主键添加一个自增主键,但是一个hibernate实例就维护一个计数器,所以在多个实例运行时候不能使用这个方法。

3.2K30

SpringBoot系列教程JPA之新增记录使用姿势

Insert使用教程 在开始之前,先声明一下,因为个人实际项目中并没有使用JPA,对JPA原则和hibernate一些特性了解也不多,目前处于学习探索阶段,主要是介绍下使用姿势,下面的东西都是经过测试得出...使用一个特定数据库表格来保存主键 GenerationType.SEQUENCE 根据底层数据库序列来生成主键,条件是数据库支持序列 GenerationType.IDENTITY 主键由数据库自动生成...插入时默认值支持方式 在创建表时候,我们知道字段都有默认值,那么如果PO对象中某个成员我传,可以插入成功么?会是默认DB值么?...从输出结果来看: 如果这个id对应记录不存在,则新增 如果这个id对应记录存在,则更新 不然这个注解可以主动指定id方式进行插入or修改,那么如果没有这个注解,插入时也指定id,会怎样呢?...小结 本文主要介绍了下如何使用JPA来实现插入数据,单个or批量插入,也抛出了一些问题,有的给出了回答,有的等待后文继续跟进,下面简单小结一下主要知识点 POJO与表关联方式 注意几个注解使用

1.3K20

jdbc java_Springdata

总的来说JPA是ORM规范,Hibernate、TopLink等是JPA规范具体实现,这样好处是开发者可以面向JPA规范进行持久层开发,底层实现则是可以切换。...因此为了简化开发, 我们可以将其交给jpa来自动填充。 审计功能创建人和修改者注入方式下一节再讲哦,贪多嚼烂。...,已经结束了。 可以看到,这个接口继承了JpaRepository,spring-data-jpa只需要这个信息,就可以帮你完成常用操作:增删查改。...这一节不具体展开JpaRepository中所包含所有方法,单纯使用最简单增删查改来过瘾 4.Service业务逻辑层 业务逻辑层是程序逻辑核心,所有的重要逻辑操作都应该往Service中写,不是写到...自动通过序列生成, name是提交数据, 版本号自动插入为0, createdBy,lastUpdatedBy由于还未配置完整,暂时没有数据, createdDate,lastUpdatedDate在插入时皆为当前时间

1K10

一篇 JPA 总结

JPAHibernate 关系 JPA 是规范:JPA 本质上是一种 ORM 规范,不是 ORM 框架,只是定制了一些规范,提供了一些编程 API 接口,具体实现由 ORM 厂商实现 Hibernate...**@Table** 当实体类与其映射数据库表名不同名时需要使用 @Table 标注说明,该标注与 @Entity 标注并列使用 **@id** @Id 标注用于声明一个实体类属性映射为数据库主键列...,Oracle 不支持这种方式 AUTO: JPA自动选择合适策略,是默认选项 TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。...remove():类似于 Hibernate 中 Session delete 方法,但此方法只可删除持久化对象, hibernate 方法可以删除游离对象(不在缓存中,但在数据库中可能有对象,...方法测试 保存数据(先保存维护关联关系一端,否则会多出 UPDATE 语句) ? 使用 IDEA 反向生成实体(双向一对一) ?

5.6K20

Mybatis使用generatedKey在插入数据时返回自增id始终为1,自增id实际返回到原对象当中问题排查

今天在使用数据库时候,遇到一个场景,即在插入数据完成后需要返回此数据对应自增主键id,但是在使用Mybatis中generatedKey且确认各项配置均正确无误情况下,每次插入成功后,返回都是...1,不是最新自增Id。...终于凭借着一次Debugg发现问题,原来在使用Mabatis中insert或者insertSelective方式插入时,如使用int insert(TestGenKey testGenKey)时,返回值...int表示插入操作受影响行数,不是指自增长id,那么返回自增id到底去哪里了呢?...null : sex.trim(); } } 测试及Debugg 编写测试方法测试插入 插入成功后观察对应变量对应值 总结:调用Insert后插入操作之后,所得到自增长Id被赋值到原对象当中

1.6K10

spring boot 中使用 jpa以及jpa介绍

2.4高级特性 JPA 中能够支持面向对象高级特性,如类之间继承、多态和类之间复杂关系,这样支持能够让开发者最大限度使用面向对象模型设计企业应用,不需要自行处理这些特性在关系数据库持久化...@GeneratedValue 指定如何标识属性可以被初始化,例如自动、手动、或从序列表中获得值。 @Transient 指定属性,它是持久,即:该值永远不会存储在数据库中。...·validate:每次加载hibernate时,验证创建数据库表结构,只会和数据库中表进行比较,不会创建新表,但是会插入新值。...我们使用postman来测试: 然后通过查询数据库来看一下结果: 我们可以看到成功插入了数据,并且观察表结构可以看到,agee是我们定义column名称,id为自增。...我们也可以在日志中看到hibernate输出日志: Hibernate: select person0_.id as id1_0_, person0_.agee as agee2_0_, person0

3.9K10

Spring Boot---(13)Spring Boot 使用JPA访问数据库

本文详细介绍了,Spring Boot环境下如何使用Spring-data-jpa 来访问和操作数据库。...=true spring.data.jpa.repositories.enabled=true ddl-auto四种状态: create: 每次加载hibernate时都会删除上一次生成表,然后根据你...validate :每次加载hibernate时,验证创建数据库表结构,只会和数据库中表进行比较,不会创建新表,但是会插入新值。... Entity中映射成列字段得加@Transient 注解 这是主键生成策略,四种方式: JPA提供四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO.        ...TABLE:使用一个特定数据库表格来保存主键。         SEQUENCE:根据底层数据库序列来生成主键,条件是数据库支持序列

2.1K20

Jpa使用详解

高级特性 JPA 中能够支持面向对象高级特性,如类之间继承、多态和类之间复杂关系,这样支持能够让开发者最大限度使用面向对象模型设计企业应用,不需要自行处理这些特性在关系数据库持久化。...JPAHibernate关系就像JDBC和JDBC驱动关系,JPA是规范,Hibernate除了作为ORM框架之外,它也是一种JPA实现。JPA怎么取代Hibernate呢?...答案是否定,也就是说,如果使用JPA规范进行数据库操作,底层需要hibernate作为其实现类完成数据持久化工作。 ? JPA入门案例 1.搭建开发环境 第一步:创建一个maven工程 ?...如果此列建在主表上(默认建在主表),该属性定义该列所在从表名字搭建开发环境[重点] 第六步:配置JPA核心配置文件 在java工程resources路径下创建一个名为META-INF文件夹,在此文件夹下创建一个名为...JPA主键生成策略 通过annotation(注解)来映射hibernate实体,基于annotationhibernate主键标识为@Id, 其生成规则由@GeneratedValue设定.这里

3.1K20

如何完美解决 `could not execute statement; SQL ; nested exception is org.hibernate.exception.SQLGramm

: could not execute statement 摘要 当我们在使用 HibernateJPA 进行数据库操作时,可能会遇到 could not execute statement; SQL...SQLGrammarException 是由 HibernateJPA 抛出异常,表示无法执行 SQL 语句,通常是由于 SQL 语法错误或数据映射匹配导致。...使用正确 JPA 注解(如 @Column、@Id 等)为字段添加准确映射信息。...解决方案: 确保数据库中表具有正确主键和外键约束。 插入或更新数据时,确保满足表约束条件。...参考资料 Spring Data JPA 官方文档 Hibernate 官方文档 Stack Overflow 相关问题解答 总结与未来展望 数据库交互总是有挑战,尤其是当使用 ORM 框架时。

1.6K10

SpringDataA和Mybaits有什么区别,如何使用

其实,在阿粉眼中,JPA好像就是和Hibernate是一样东西,区别并不大。 Spring Data JPA是Spring Data子模块。...规范,HibernateJPA规范具体实现,这样好处是开发者可以面向JPA规范进行持久层开发,底层实现则是可以切换。...为什么这么多公司会选择 Mybaits ,选择使用 SpringDataJPA 呢? 因为Spring Data Jpa开发难度要大于Mybatis。...TABLE:使用一个特定数据库表格来保存主键 SEQUENCE:根据底层数据库序列来生成主键,条件是数据库支持序列。...这个值要与generator一起使用,generator 指定生成主键使用生成器(可能是orcale中自己编写序列) IDENTITY:主键由数据库自动生成(主要是支持自动增长数据库,如mysql

93440

SpringBoot中@Transaction在不同MySQL引擎下差异性

,事务回滚并没有效果,数据已经插入到DB中: 搜索了下,发现有人提到说MySQL数据库事务生效,可能和引擎类型有关系,因此下一步往这个方向排查一下。...修改JPA自动创建表时引擎 测试工程中,使用JPA自动创建数据表方式,默认情况下,创建出来数据表使用是MyISAM引擎,因此如果需要使用事务,可以手动配置下,指定使用InnoDB引擎进行创建数据表...in the log or console spring.jpa.show-sql=true spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl...spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl...为什么事务对MyISAM引擎生效呢 为什么Spring事务无法控制MySQLMyISAM引擎类型数据表操作呢?

1K20

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

一、Spring Data JPA 介绍 JPA(Java Persistence API)Java持久化API,是 Java 持久化标准规范,Hibernate是持久化规范技术实现,Spring...Data JPA是在 Hibernate 基础上封装一款框架。...[没表-创建-操作 | 有表-更新没有的属性列-操作] validate:每次加载 hibernate 时,验证创建数据库表结构,只会和数据库中表进行比较,不会创建新表,但是会插入新值。...3.1.2 事务生效原因 3.1.2.1 确认数据库引擎 在application.properties配置数据库引擎为InnoDB: spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect...四、常见错误 在 Spring Data JPA 使用当中,可能会遇到如下一些错误。

3.5K40

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

一、Spring Data JPA 介绍 JPA(Java Persistence API)Java持久化API,是 Java 持久化标准规范,Hibernate是持久化规范技术实现,Spring...Data JPA是在 Hibernate 基础上封装一款框架。...没表-创建-操作 | 有表-更新没有的属性列-操作 validate:每次加载 hibernate 时,验证创建数据库表结构,只会和数据库中表进行比较,不会创建新表,但是会插入新值。...3.1.2 事务生效原因 3.1.2.1 确认数据库引擎 在application.properties配置数据库引擎为InnoDB: spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect...四、常见错误 在 Spring Data JPA 使用当中,可能会遇到如下一些错误。

3.7K20

JPA入门和相关操作

JPA优势 标准化 容器级特性支持 简单方便 查询能力 高级特性 JPAhibernate关系 JPAHibernate关系就像JDBC和JDBC驱动关系,JPA是规范,Hibernate...JPA怎么取代Hibernate呢?JDBC规范可以驱动底层数据库吗?答案是否定,也就是说,如果使用JPA规范进行数据库操作,底层需要hibernate作为其实现类完成数据持久化工作。...--jpa提供者可选配置:我们JPA规范提供者为hibernate,所以jpa核心配置中兼容hibernate配 --> <!...,基于annotationhibernate主键标识为@Id, 其生成规则由@GeneratedValue设定.这里@id和@GeneratedValue都是JPA标准用法。...GenerationType.IDENTITY Oracle使用最多是底层序列化增长:GenerationType.SEQUENCE jpa操作操作步骤 1.加载配置文件创建实体管理器工厂

3.1K20

SpringBoot中JPA基本使用

它是一个非常强大ORM持久化解决方案,免去了使用JDBCTemplate 开发编写脚本工作。JPA通过简单约定好接口方法规则自动生成相应 JPQL 语句,然后映射成 POJO 对象。...JPA是一个规范化接口,封装了 Hibernate 操作作为默认实现,让用户不通过任何配置即可完成数据库操作。JPA、SpringData 和 Hibernate关系如图所示。...hibernate: format_sql: true 主要说明一下 spring.jpa.hibernate.ddl-auto这个属性: 属性 说明 create 每次应用启动时候会重新根据实体建立表...很多网上教程使用是增加如下配置: spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect 虽然也能达到效果...当然在一些情况下,我们并不希望使用JPA自动为我们创建表,我们可以先提前建好表,最后再根据表结构定义实体类。

1.2K10
领券