Я использую приложение Spring с Hibernate и postgres для хранения данных. Конфигурация для сущности продукта следующая:
/**
* A Product.
*/
@Entity
@Table(name = "product")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Document(indexName = "product")
public class Product implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;
...
}
Когда я хочу создать продукт с помощью веб-приложения, я получаю следующую ошибку duplicate key value violates unique constraint. Detail : the key (id)=(35018) already exists
.
Из моего понимания использования в спящем режиме последовательность в дБ для генерации следующего значения идентификатора. Поэтому я сделал SELECT c.relname FROM pg_class c WHERE c.relkind = 'S';
в оболочке psql, чтобы получить всю последовательность в моей БД. Вывод:
hibernate_sequence
jhi_user_id_seq
key_value_id_seq
jhi_persistent_audit_event_event_id_seq
unit_id_seq
generic_user_id_seq
currency_id_seq
customer_type_id_seq
customer_exploitation_type_id_seq
legal_entity_id_seq
deposit_id_seq
machine_id_seq
tank_id_seq
address_id_seq
product_id_seq
rewarded_file_id_seq
bar_code_type_id_seq
quality_label_id_seq
shop_pdv_id_seq
brand_id_seq
category_id_seq
material_id_seq
ws_call_id_seq
postal_code_id_seq
commune_id_seq
country_id_seq
event_id_seq
event_type_id_seq
key_blob_id_seq
card_id_seq
Так что я подумал, что у меня есть product_id_seq, и мне нужно только обновить значение, чтобы все работало. Но когда я запрашиваю значение с помощью SELECT * FROM product_id_seq;
, я получаю:
last_value | log_cnt | is_called
------------+---------+-----------
100616 | 0 | t
Так что здесь я думаю, что идентификатор, сгенерированный для идентификатора продукта, не исходит из этого product_id_sequence
, так как он пытается вставить продукт с id = 35018
, а последнее значение product_id_seq
равно 100616
.
Так что мне интересно, откуда этот идентификатор 35018? Какая последовательность используется для ее генерации? Я думаю, мне нужно обновить эту загадочную последовательность, чтобы заставить вещи работать. Для информации последовательность hibernate имеет значение 36400
.
Любая идея, которая могла бы привести меня в движение? Заранее спасибо.