Я использую 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;
Пример сценария:
Все остальные данные в порядке, кроме ID.
Обновлено:
Я удаляю всю остальную логику в коде и оставляю только часть сохранения, чтобы изолировать проблему.
но я использую возвращенный идентификатор и позже буду использовать его для ссылки на эту запись. поэтому мне нужно, чтобы он был точным. Как я могу убедиться, что вместо этого получил вставленный идентификатор?
Вы можете проверить сообщение это, которое полностью описывает проблему
Я только что узнал, что есть триггер базы данных, который вызывает SEQ1.nextVal каждый раз, когда вставляется запись. Отбрасывание триггера и изменение таблицы, чтобы иметь SEQ1.nextVal ПО УМОЛЧАНИЮ решает мою проблему.
Если вы отлаживали вставку, поведение исключается. Он запускает создание последовательности и создает новую позже при вставке. Просто оставьте как есть, последовательность будет в порядке.