Последовательность значений первичного ключа id SpringBoot-Hibernate-Mysql совместно используется во всем моем домене с помощью @GeneratedValue - PullRequest
0 голосов
/ 18 октября 2018

У меня есть два класса / домена (Person) и (Account), у них обоих есть поле идентификатора с @GeneratedValue(strategy = GeneratedType.AUTO) или любым другим 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;
    }

}

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Когда вы используете @GeneratedValue(strategy = GenerationType.AUTO), ваша таблица не создается с функцией автоматического увеличения в mysql.Если вы хотите использовать эту функцию для первичного ключа, используйте @GeneratedValue(strategy = GenerationType.IDENTITY).

Пожалуйста, обратитесь к ответу Gergely Bacso , чтобы понять, как работает GenerationType.AUTO.

0 голосов
/ 18 октября 2018

Вы можете исправить это, изменив определение своего идентификатора на:

@Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "pet_generator") @SequenceGenerator(name="pet_generator", sequenceName = "pet_seq")

В настоящее время с вами происходит:
Вы определили "AUTO" Логика генерации идентификатора, это имеетпо умолчанию используется последовательность БД, но , поскольку вы не указали ни одной последовательности, Hibernate решил использовать одну общую последовательность , которая используется всеми определениями сущностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...