Возвращенный идентификатор объекта отличается от фактических данных, сохраненных в базе данных

Я использую Spring Data JPA. Когда я проверяю Entity, возвращаемый методом save (Entity), он отличается от фактического идентификатора, сохраненного в базе данных. Я использую Oracle, и моя конфигурация Entity ID использует последовательность из Oracle db.

@Id
@Column(name = "ID", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_NAME")
@SequenceGenerator(name = "SEQ_NAME", sequenceName = "SEQ_1", allocationSize = 1)
private BigDecimal id;

Пример сценария:

  1. Вставить запись1 с помощью save (record1);
  2. Проверенная запись 1 должна иметь ID = 1001
  3. Проверил db и ID 1002.

Все остальные данные в порядке, кроме ID.

Обновлено:

Я удаляю всю остальную логику в коде и оставляю только часть сохранения, чтобы изолировать проблему.

Если вы отлаживали вставку, поведение исключается. Он запускает создание последовательности и создает новую позже при вставке. Просто оставьте как есть, последовательность будет в порядке.

Karthik R 07.05.2018 13:28

но я использую возвращенный идентификатор и позже буду использовать его для ссылки на эту запись. поэтому мне нужно, чтобы он был точным. Как я могу убедиться, что вместо этого получил вставленный идентификатор?

anonymouse 07.05.2018 13:40

Вы можете проверить сообщение это, которое полностью описывает проблему

saeed eivazi 21.04.2021 13:10
0
3
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Я только что узнал, что есть триггер базы данных, который вызывает SEQ1.nextVal каждый раз, когда вставляется запись. Отбрасывание триггера и изменение таблицы, чтобы иметь SEQ1.nextVal ПО УМОЛЧАНИЮ решает мою проблему.

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