2017-02-14 5 views
0

После миграции в Hibernate 5.2.7 я, кажется, получаю неправильные значения для поля id.hibernate 5 sequencegenerator не дает правильного значения

Мой код:

@Id @SearchableId 
@GeneratedValue(strategy=GenerationType.AUTO, generator="hms_seq_gen") 
@SequenceGenerator(name="hms_seq_gen", sequenceName="patregn_seq") 
protected Integer ID; 

Hibernate пожары этот запрос:

select nextval ('patregn_seq')
который дает 5367. последнее значение в поле идентификатора в таблице 5358.

И я получаю это
ERROR: duplicate key value violates unique constraint "patientregistration_pkey" [java] Detail: Key (id)=(5318) already exists.

Я уверен, что этот вопрос похож на this и this, но я вынужден спросить, потому что решение, данное там не работает для меня:

Я добавил

<property value="true" name="hibernate.id.new_generator_mappings"/>

к моему persistence.xml, но нет. Любая помощь будет принята с благодарностью.

ответ

2

Фактически при переходе на новую версию Hibernate 5.2.7 hibernate.id.new_generator_mappings = true по умолчанию. Но для обратной совместимости вы должны изменить этот флаг на false, попробуйте. Для получения дополнительной информации, пожалуйста, прочтите - http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html. Просто выполните поиск new_generator_mappings, и вы получите достаточно информации об этом.

+0

Спасибо за ваше предложение. Оно работает. Но сейчас я немного смущен. Согласно комментарию Стива Эберсоле по адресу http://stackoverflow.com/questions/12737092/is-there-a-way-to-dynamically-choose-a-generatedvalue-strategy-using-jpa-annota, он должен быть установлен в true чтобы описать поведение - вот что мне казалось нужным. Кроме того, когда я устанавливаю свойство в false, я получаю предупреждение: «Нашел использование устаревшего генератора id на основе устаревших [org.hibernate.id.SequenceGenerator]; Вместо этого используйте org.hibernate.id.enhanced.SequenceStyleGenerator. 'Это, даже когда я использую JPA SequenceGenerator –

+0

Да, Томас генерирует предупреждение. Из Руководства пользователя - «Существующие приложения могут отключить это (установить значение false) для совместимости обновлений с 3.x и 4.x до 5.x." Фактически при запуске разработки приложения должно быть установлено значение true, но для устаревания - вы должны его отключить, иначе ваше приложение завершится ошибкой. – idmitriev

 Смежные вопросы

  • Нет связанных вопросов^_^