SpringBoot-Hibernate-Mysql id 主键值序列使用

我有两个类/域 ( 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;


@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;

    }


}


长风秋雁
浏览 236回答 2
2回答

Cats萌萌

当您使用 时@GeneratedValue(strategy = GenerationType.AUTO),您的表不是使用 mysql 中的自动增量功能创建的。如果您想将该功能用于主键,请@GeneratedValue(strategy = GenerationType.IDENTITY)改用。请参阅Gergely Bacso的回答以了解GenerationType.AUTO工作原理。

摇曳的蔷薇

您可以通过将 ID 定义更改为以下内容来解决此问题:@Id@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "pet_generator")@SequenceGenerator(name="pet_generator", sequenceName = "pet_seq")当前发生在您身上的是:您定义了"AUTO"ID 生成逻辑,默认使用 DB 序列,但是因为您没有指定任何序列,Hibernate 决定使用一个单一的公共序列,在所有实体定义之间共享。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java