Spring Boot: глобальная последовательность Hibernate - PullRequest
0 голосов
/ 04 апреля 2020

В настоящее время я определяю таблицы следующим образом:

Пример находится в Kotlin, но вы можете ответить в Java, если хотите.

@Entity
data class Task(@Id @GeneratedValue(strategy = GenerationType.SEQUENCE)
                var id: Int = 0,

                @ManyToOne(optional = false) @OnDelete(action = OnDeleteAction.CASCADE)
                var exercise: Exercise = Exercise(),

                @Column(nullable = false)
                var name: String = "")

@Entity
data class Exercise(@Id @GeneratedValue(strategy = GenerationType.SEQUENCE)
                    var id: Int = 0,

                    @Column(nullable = false)
                    var count: Int = 0)

Используя этот пример все таблицы используют одну и ту же последовательность: hibernate_sequence.

Если я хочу настроить его, например, установить пользовательский allocationSize, то я должен определить его в каждой таблице, я прав?

@SequenceGenerator(name = "task_seq", sequenceName = "task_seq", allocationSize = 100)

Есть Боб или что-то еще? Потому что мне нравится идея использовать одну и ту же последовательность для всех таблиц.

1 Ответ

1 голос
/ 04 апреля 2020

У вас может быть абстрактный базовый класс с идентификатором Id:

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;

@MappedSuperclass
public abstract class BaseEntity {

    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private Long id;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

}

, и каждый объект будет расширять его.

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