我有两个类/域 ( Person) 和 ( Account),它们都有 id 字段@GeneratedValue(strategy = GeneratedType.AUTO)或任何其他字段GeneratedType,但是保存域会导致它们共享主键的序列。当我保存个人域时,它将使用id=1,然后保存帐户将使用id=2即使它们是完全不同的域,我不想要这个,已经搜索了很长时间但我不知道要搜索的关键字。编辑:将宠物更改为帐户我使用 Spring Boot 2.0.4.RELEASE 和 spring-boot-starter-data-jpa。MySql 是 8.0我有一个 mappingSuperclass 域类,但是即使我将 Id 分别放在每个类中,它的行为仍然相同..领域类package com.myband.band.domain;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.MappedSuperclass;@MappedSuperclasspublic 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;@Entitypublic 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; }}
2 回答
Cats萌萌
TA贡献1805条经验 获得超9个赞
当您使用 时@GeneratedValue(strategy = GenerationType.AUTO)
,您的表不是使用 mysql 中的自动增量功能创建的。如果您想将该功能用于主键,请@GeneratedValue(strategy = GenerationType.IDENTITY)
改用。
请参阅Gergely Bacso的回答以了解GenerationType.AUTO
工作原理。
摇曳的蔷薇
TA贡献1793条经验 获得超6个赞
您可以通过将 ID 定义更改为以下内容来解决此问题:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "pet_generator")
@SequenceGenerator(name="pet_generator", sequenceName = "pet_seq")
当前发生在您身上的是:
您定义了"AUTO"ID 生成逻辑,默认使用 DB 序列,但是因为您没有指定任何序列,Hibernate 决定使用一个单一的公共序列,在所有实体定义之间共享。
添加回答
举报
0/150
提交
取消