Hibernate, генерирующий два разных идентификатора последовательности для вставки PostgreSQL

У меня есть объект, определенный с помощью первичного ключа, сгенерированного последовательностью:

@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 полностью испортили это», но там не так много помимо этого не очень полезного заявления.

6
задан Community 23 May 2017 в 11:55
поделиться