У меня есть объект, определенный с помощью первичного ключа, сгенерированного последовательностью:
@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 (на основе va lue вернулся из SequenceStructure. Откуда Hibernate 1554?
Мне кажется, в Hibernate есть ошибка - SequenceStructure знает правильное следующее значение, но не используется. Есть идеи, как решить эту проблему?
К вашему сведению: я знаю эту страницу, на которой говорится об использовании GenerationType.AUTO , потому что «люди из Hibernate полностью испортили это», но там не так много помимо этого не очень полезного заявления.