Hibernate_Sequence для каждой сущности или таблицы

По умолчанию Hibernate использует одну глобальную последовательность под названием hibernate_sequence. Итак, если добавляется запись клиента, и идентификатор генерирует 100, а затем я добавляю запись страны, и идентификатор генерирует 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;

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

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
0
5 818
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуйте создать собственную последовательность, используя аннотацию @SequenceGenerator. Вы можете установить начальное значение последовательности initialValue = 1 и allocationSize=1 для увеличения. Если вы не будете использовать allocationSize=1, спящий режим использует размер выделения по умолчанию, равный 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;

Вам нужно определить последовательность в своей базе данных, использовать @SequenceGenerator и пометить свое поле как сгенерированное db (@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;

}

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

Другие вопросы по теме