mysql-MySQL 在hibernate中遇到的主键生成问题

问题描述

MySQL 在hibernate中遇到的主键生成问题

最近使用Mysql连hibernate,生成策略为identity,在添加数据的时候遇到问题, 比如添加报销单表和报销明细表(报销单和报销明细是一对多的关系,报销单设置了cascade="all"),每次保存报销单对象数据的时候,会发现上一次保存的报销单里面的报销明细会保存到这一次保存的报销单对象里面。
调试后发现是程序每次都自动给报销单对象的id为上次插入的ID值,然后在真正插入数据库时id+1,报销明细对象跟着就把上次的外键值id也变成了id+1,这是何解啊? 是否是主键生成策略的关系,还是要用assing手动添加主键?

解决方案

是不是本该执行add最后执行了update了啊??

解决方案二:

mysql的主键问题

时间: 2024-10-31 04:21:18

mysql-MySQL 在hibernate中遇到的主键生成问题的相关文章

hibernate中如何解决主键的配置问题?

问题描述 我有A表和B表两个表,B表引用了A表主键作为外键,两个表的主键都不是序列,我在hibernate配置主键id时都设置成<generatorclass="assigned"/>我在执行向B表添加一条记录的时候报了如下错误:ERRORcom.aptech.dao.TDeviceDAO-savefailedorg.hibernate.id.IdentifierGenerationException:idsforthisclassmustbemanuallyassigne

hibernate5(5)实体映射注解配置[2]主键生成策略

@GeneratedValue基本注解类型 在上一篇文章中,我们讲到了JPA使用@GeneratedValue注解来定义生成策略,而关于注解生成策略有4种基本支持类型: 1. GenerationType.TABLES 当前主键的值单独保存到一个数据库的表中 2. GenerationType.SEQUENCE 利用底层数据库提供的序列生成标识符 3. GenerationType.IDENTITY 采取数据库的自增策略 4. GenerationType.AUTO 根据不同数据库自动选择合适的

hibernate-Hibernate框架使用JPA注解时,使用的主键生成策略

问题描述 Hibernate框架使用JPA注解时,使用的主键生成策略 Hibernate框架使用JPA注解,在ID加上@GeneratedValue注解,使用的是什么主键生成策略?数据库生成了一张hibernate_sequence表.使用的是M有SQL数据库 解决方案 你用的sequence 这种策略吧,这是针对oracle 不提供自动增长的数据库类型的主键的生成方式 解决方案二: JPA使用Hibernate实现使用UUID.主键的生成策略.JPA学习笔记(4)--使用Table策略来生成主

Java的Hibernate框架中的双向主键关联与双向外键关联_java

一.双向主键关联双向的主键关联其实是单向一对一主键关联的一种特殊情况,只不过要在关联对象的两端的映射文件中都要进行<one-to-one>的配置,另外还要在主映射的主键一端采用foreign外键关联属性. 这里同样使用Person和IdCard来讨论,一个人对应着一个唯一的身份证,而且一个身份证也唯一映射着一个人,所以这就产生了双向的关联关系,Person的主键同样也是IdCard的主键,分别是主键的同时也是外键,这种关联关系成为双向一对一映射,表现到关系模型中可如下图: 图中的两个表采用了主

java-hibernate如何配置mysql主键生成策略?

问题描述 hibernate如何配置mysql主键生成策略? 在之前的使用过程中,是用的oracle,只需要用注解的方式在主键上加@GeneratedValue,新增操作时,就可以自动生成主键了. 但是现在这个项目转为用mysql,用@GeneratedValue就会报"java.sql.SQLException: Field '***' doesn't have a default value" @Id @GeneratedValue @Column(name = "rol

mysql 插入数据失败防止自增长主键增长的方法

mysql设置了自增长主键ID,插入失败的那个自增长ID也加一的,比如失败5个,下一个成功的不是在原来最后成功数据加1,而是直接变成加6了,失败次数一次就自动增长1了,能不能让失败的不增长的? 或者说mysql插入数据失败,怎么能防止主键增长? MYSQL不保证AUTO_INCREMENT依次增长(1,2,3,4,5),但是可以保证正向增长(1,3,5,9)所以,当你某次操作失败后,下次AUTO_INCREMENT就不是顺序的了. innodb的自增是缓存在内存字典中的,分配方式是先预留,然后再

常用Hibernate主键生成策略

今天学习到了关于Hibernate主键生成策略的问题,总结下,不足之处,请大家指出. Hibernate为优秀的持久层框架的代表.在传统的JDBC+JavaBean操作中,实体对象都由程序员自己去封装,然后返回.而在Hibernate中,采用对象关系映射『ORM』,大大简化了对数据库的操作. 在数据库的设计和操作中,我们通常会给表建立主键.主键,可以分为自然主键和代理主键. 自然主键表示:采用具有业务逻辑含义的字段作为表的主键.比如在用户信息表中,采用用户的身份证号码作为主键.但是这样一来,随着

Hibernate主键生成策略总结(这里面讲的很详细)

 Hibernate提供的主键生成策略,使我们可以在实体类的映射xml文件中设定关键字来告诉hibernate我们要使用的主键生成方式,然后hibernate会根据设定完成数据库的主键控制. 一.首先通过举例子来了解实体映射文件(*.hbm.xml)中对id生成策略配置格式     用户User的实体类User.java      [java] view plaincopyprint? package com.bjpowernode.hibernate;    import java.util.

hibernate主键生成策略

问题描述 hibernate主键生成策略 最开始程序是oracle的 用的主键生成策略当然是序列 但以后可能需要兼容各种数据库所以把主键测试改为GenerationType.AUTO 改了之后再mysql中没任何问题 但在oracle中新增数据的时候一直都是ORA-00001: 违反唯一约束条件 (CREDITV2.SYS_C005464)这个错误.我猜测是主键重复了 请问怎么样的主键策略可以兼容多种数据库, 并兼容手动添加数据到表之后的主键, 兼容多种数据库数据互相导出导入