Hibernate 5: класс генератора = последовательность не работает

У меня есть следующее сопоставление:

    <id name="id" type="java.lang.Long" column="id">
        <generator class="sequence">
            <param name="sequence">tracksdata_seq</param>
        </generator>
    </id>

Все прошло нормально, когда я работал с ним в Hibernate 4.2. Теперь я перехожу на Hibernate 5 и сталкиваюсь со следующей проблемой:

2015-10-06 19:49:50 DEBUG SQL:92 - select nextval ('hibernate_sequence')
2015-10-06 19:49:50 DEBUG SqlExceptionHelper:122 - could not extract ResultSet [n/a]
org.postgresql.util.PSQLException: ERROR: relation "hibernate_sequence" does not exist

Как решить эту проблему?

P.S. Гибернация 5.0.2.Финал.


person Green Root    schedule 06.10.2015    source источник
comment
Он ищет последовательность hibernate_sequence, вы упомянули об этом в сопоставлении выше? У вас есть trackdata_seq, не уверен, что это относится к hyberante_sequence   -  person Zeus    schedule 14.10.2015
comment
Это не должно относиться к hibernate_sequence — оно должно использовать trackdata_seq, как это было в hibernate 4.2.   -  person Green Root    schedule 15.10.2015
comment
@ maksim2020 У меня была такая же проблема при переходе с 4.3.8 на 5.0.6Final. Это происходит только в том случае, если вы используете XML-сопоставления. Я переключился на аннотации JPA, и все заработало.   -  person Gustavo    schedule 29.12.2015
comment
Обратите внимание, что имя параметра больше не является последовательностью, а начиная с версии 5 это имя_последовательности. См. stackoverflow.com/questions/42191210/   -  person Vering    schedule 19.04.2017


Ответы (3)


У вас есть два варианта:

  1. Вы устанавливаете для свойства конфигурации hibernate.id.new_generator_mappings значение false и переключаетесь обратно на старые генераторы идентификаторов.
  2. Вы меняете отображение следующим образом:

    <generator class="sequence">
        <param name="sequence">MY_SEQUENCE</param>
    </generator>
    

    to:

    <generator class="org.hibernate.id.enhanced.SequenceStyleGenerator">
        <param name="optimizer">none</param>
        <param name="increment_size">1</param>
        <param name="sequence_name">MY_SEQUENCE</param>
    </generator>
    
person Mark Ola    schedule 04.01.2016
comment
Формат загрузки Spring: spring.jpa.properties.hibernate.id.new_generator_mappings. Но мне также понадобился spring.jpa.properties.hibernate.default_schema, чтобы hibernate использовал правильное имя схемы. - person Jay; 13.08.2018

Я также столкнулся с этой проблемой при переходе с Hibernate 4.3.10 на Hibernate 5.0.4. Как и максим2020, я заменил экземпляры <generator class="sequence"> на <generator class="identity">. Однако, чтобы сохранить последовательность идентификаторов для затронутых таблиц, мне также пришлось написать сценарий миграции sql, который установил значение по умолчанию для столбца как следующее значение существующей последовательности. В PostgreSQL это делается следующим образом:

ALTER TABLE ONLY affected_table ALTER COLUMN affected_id SET DEFAULT nextval('original_sequence'::regclass);
person pants    schedule 23.11.2015

Используйте "sequence_name" вместо "sequence" в <param name="sequence">.

Это сработало для меня.

person Pavan Ghantasala    schedule 27.07.2017
comment
Генератор class=sequence устарел, поэтому, вероятно, стоит изменить его, как указано в других ответах, но тем временем это изменение проще, спасибо! - person shoguren; 18.03.2021