java - SpringBoot-Hibernate-Mysql id 主键值序列在我的所有域中使用@GeneratedValue 共享
问题描述
我有两个类/域 ( Person
) 和 ( Account
),它们都有 id 字段 with @GeneratedValue(strategy = GeneratedType.AUTO)
or any other GeneratedType
,但是保存域会导致它们共享主键的序列。
当我保存一个人域时,它会使用id=1
,然后保存一个帐户id=2
即使它们是完全不同的域也会使用,我不想要这个,已经搜索了一段时间但我不知道要搜索的关键字。
编辑:将宠物更改为帐户
我将 Spring Boot 2.0.4.RELEASE 与 spring-boot-starter-data-jpa 一起使用。
MySql 是 8.0
我有一个 mappedSuperclass 域类,但即使我为每个类单独放置了 Id,它仍然是相同的行为..
领域类
package com.myband.band.domain;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
@MappedSuperclass
public abstract class Domain {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private int version;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public int getVersion() {
return version;
}
public void setVersion(int version) {
this.version = version;
}
}
人员类
package com.myband.band.domain;
import javax.persistence.Entity;
@Entity
public class Person extends Domain {
private String firstName;
private String lastName;
private String nickName;
private int age;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
账户类
package com.myband.login.domain;
import javax.persistence.Entity;
import com.myband.band.domain.Domain;
@Entity
public class Account extends Domain {
private String username;
public Account() {
}
public Account(String username) {
super();
this.username = username;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
解决方案
当您使用@GeneratedValue(strategy = GenerationType.AUTO)
时,您的表不是使用 mysql 中的自动增量功能创建的。如果您想将该功能用于主键,请@GeneratedValue(strategy = GenerationType.IDENTITY)
改用。
请参考Gergely Bacso的回答以了解其GenerationType.AUTO
工作原理。
推荐阅读
- r - R 数据表。如果列 x 则行数,否则求和
- javascript - Javascript字到二进制到位数组
- arrays - RISC-V 实现不分支的离散函数
- react-admin - 我无法使用已在 Firebase 中注册的电子邮件或您的用户名和密码 Demo 登录 react-admin-firebase
- typescript - 如何解决两个库之间的 d.ts 文件中的重复问题?
- git - 无法将我的更改推送到 GitHub 存储库或同步
- python - python中的互联网快捷方式
- oracle11g - 无法在 windows 中编译 pro c 程序
- javascript - 获得未定义不是评估 navigation.navigate 的对象
- r - 在组级别之间排列列值