У меня есть объект, определенный с помощью сгенерированного последовательностью первичного ключа:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_key_gen")
@SequenceGenerator(name = "id_key_gen", sequenceName = "id_key_seq")
@Column(name = "id", unique = true, nullable = false)
public int getId() {
return this.id;
}
Я использую PostgreSQL, и этот ключ определен как последовательный. По данным PostgreSQL
select last_value from id_key_seq;
возвращает
1603.
Когда я делаю create () для сохранения экземпляра этой сущности, я вижу следующее в моих журналах (несвязанные вещи отредактированы):
05 15: 15: 26.948 org.hibernate.id.enhanced.SequenceStructure [DEBUG] - Получено значение последовательности: 1604
05 15: 15: 26.948 org.hibernate.event.def.AbstractSaveEventListener [DEBUG] - сгенерированный идентификатор: 1554, с использованием стратегии: org.hibernate.id.enhanced.SequenceStyleGenerator
Последующие операторы вставки SQL ссылаются на значение 1554, а не на то, что должно использовать, 1604 (на основе значения, возвращенного из SequenceStructure. Откуда Hibernate получил 1554 от?
Мне кажется, в Hibernate есть ошибка - SequenceStructure знает правильное следующее значение, но оно не используется. Есть идеи, как решить эту проблему?
К вашему сведению: мне известна эта страница, на которой написано, что нужно использовать GenerationType.AUTO , потому что "ребята из Hibernate полностью испортили это", но есть не так уж много, что не очень полезно заявление.