Hibernate_Sequence для каждого объекта или таблицы - PullRequest
0 голосов
/ 25 февраля 2019

По умолчанию Hibernate использует одну глобальную последовательность, которая называется hibernate_sequence.Поэтому, если запись клиента добавляется, а id генерирует 100, а затем я добавляю запись страны, а id генерирует 101.

в модели страны

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="CTRY_ID")
private long ctryID;

в модели клиента

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="CUST_ID")
private long custID;

Мне нужен отдельный механизм для таблиц клиентов и стран, т. Е. Last Id, хранимый в таблице Customer, равен 91, поэтому при добавлении следующей записи id становится 92. Аналогичным образом Last Id, хранящийся в стране, равен 82, поэтому следующая запись,Идентификатор должен быть 83.

Как я могу добиться такого поведения в Spring Boot / Oracle.

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Вам необходимо определить последовательность в вашей базе данных, использовать @SequenceGenerator и пометить свое поле как сгенерированное дБ (@GeneratedValue):

CREATE SEQUENCE seq
  MINVALUE 1
  MAXVALUE 1000000
  START WITH 1
  INCREMENT BY 1
  CACHE 100;

Сущности:

@SequenceGenerator(name="seq", initialValue=1, allocationSize=100)
public class Country {

    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
    @Id long id;

}

То же самое с другим - отдельным генератором последовательности.

0 голосов
/ 25 февраля 2019

Вы должны попытаться создать пользовательскую последовательность, используя аннотацию @SequenceGenerator.Вы можете установить начальное значение последовательности initialValue = 1 и allocationSize=1 для приращения.Если вы не используете allocationSize=1, hibernate использует размер выделения по умолчанию, равный 50.

Для страны:

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="ctry_seq")
@SequenceGenerator(name = "ctry_seq", sequenceName = "ctry_seq", initialValue = 1, allocationSize=1)
@Column(name="CTRY_ID")
private long ctryID;

Для клиентов:

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="cust_seq")
@SequenceGenerator(name = "cust_seq", sequenceName = "cust_seq", initialValue = 1, allocationSize=1)
@Column(name="CUST_ID")
private long custID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...