Ошибка отношение sequence не существует

I am performing hibernate jpa batch update and its giving me following error

2015-04-21 15:53:51,907 WARN  [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (Thread-283 (HornetQ-client-global-threads-462057890)) SQL Error: 0, SQLState: 42P01
2015-04-21 15:53:51,908 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (Thread-283 (HornetQ-client-global-threads-462057890)) ERROR: relation "my_seq_gen" does not exist

I am using postgres database and my ID is auto generated

  @Id
@SequenceGenerator(name="seq-gen",sequenceName="MY_SEQ_GEN"initialValue=205, allocationSize=12)
@GeneratedValue(strategy= GenerationType.SEQUENCE, generator="seq-gen")
@Column(name=""ID"",unique=true,nullable=false)
private int id;

This is my batch insert code snippet

getEm().getTransaction().begin();
System.out.println("transaction started--------------");
try {   
    for (Receipt ReceiptEntity : arrReceiptEntity) {
            getEm().persist(ReceiptEntity);
    }
    getEm().getTransaction().commit();
    System.out.println("commited");
} catch (Exception exception) {
    System.out.println("error----------------------------------------------------------------------");
    if(getEm().getTransaction().isActive())
        getEm().getTransaction().rollback();
    LOG.error(exception);
} finally {
    getEm().flush();
    getEm().clear();
    getEm().close();
}

I have added the following property in persistence.xml

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

Please suggest what i am doing wrong.

I am migrating an application running with Hibernate 3 to Hibernate 5.

I have a strange error:

ERROR: relation hibernate_sequence does not exist

We are using *.hbm.xml mapping files and everything was working fine until I changed the Hibernate version. I mean we have a pretty straight forward mapping with ID column and DB sequence generator and still Hibernate wasn’t able to pick the correct config.

<hibernate-mapping>
    <class name="com.boyan.MyClass" table="my_class">
       <id name="id" type="long">
            <column name="id" />
            <generator class="sequence">
               <param name="sequence">my_class_seq</param>
            </generator>
        </id>
...
    </class>
</hibernate-mapping>

spongebob's user avatar

spongebob

8,26714 gold badges49 silver badges83 bronze badges

asked Feb 5, 2016 at 17:42

Boyan's user avatar

0

I started digging in the Hibernate code and saw that SequenceGenerator is deprecated and the new versions use SequenceStyleGenerator. I was very confused when I noticed that in the new version the property telling which is the sequence name is changed from sequence to sequence_name. So finally when I changed:

<param name="sequence">my_class_seq</param>

to:

<param name="sequence_name">my_class_seq</param>

everything worked.

spongebob's user avatar

spongebob

8,26714 gold badges49 silver badges83 bronze badges

answered Feb 5, 2016 at 17:43

Boyan's user avatar

BoyanBoyan

5895 silver badges19 bronze badges

I bumped in to the same problem and I was using annotations. Solution was the accepted answer JPA GenerationType.AUTO not considering column with auto increment. If using annotations following should be used.

@GenericGenerator(name = "my_seq", strategy = "native", parameters = {
    @Parameter(name = "sequence_name", value = "mydb_seq")
})

Community's user avatar

answered Mar 23, 2016 at 12:11

Dev Blanked's user avatar

Dev BlankedDev Blanked

8,4553 gold badges26 silver badges32 bronze badges

Because you are using @GeneratedValue()

It will look for how the database that you are using generates ids. For MySql or HSQSL, there are increment fields that automatically increment. In Postgres or Oracle, they use sequence tables. Since you didn’t specify a sequence table name, it will look for a sequence table named hibernate_sequence and use it for default. So you probably don’t have such a sequence table in your database and now you get that error.

Either add a hibernate_sequence or

your own sequence table and use the annotations to name your sequence table that you have.

Hope that helps

Mark

Фреймворк ssh, используемый проектом; база данных проекта была перенесена с mysql на pgsql, и проблема отсутствия последовательности гибернации возникла после миграции базы данных.

С точки зрения связанной информации, класс сущности в Hibernate использует собственный метод для генерации первичных ключей. Native определяется Hibernate на основе используемой базы данных и использует один из следующих методов: identity, hilo и sequence в качестве метода генерации первичного ключа. .

MySQL использует автоинкремент в качестве первичного ключа, тогда как базы данных Oracle, pgsql и DB2 могут не иметь подобных типов автоинкремента, поэтому для его поддержки необходима последовательность с именем hibernate_sequence. То есть вам нужно создать его вручную после миграции.

нота: В pgsql последовательность создается в шаблоне, в одном шаблоне она есть, а другие шаблоны нужно создавать заново (я такой).

Оператор последовательности hibernate_sequence:

create sequence HIBERNATE_SEQUENCE
minvalue 100000
maxvalue 9999999999999999
start with 100060
increment by 1
cache 20;

После создания этой модели эта проблема была решена.

Примечания: Значение атрибута для создания последовательности можно найти в следующем блоге.

Учебник по синтаксису PostgreSQL-9.6.8 для создания последовательностей, изменения последовательностей и удаления последовательностей

Я выполняю пакетное обновление hibernate jpa и даю мне следующую ошибку

2015-04-21 15:53:51,907 WARN  [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (Thread-283 (HornetQ-client-global-threads-462057890)) SQL Error: 0, SQLState: 42P01
2015-04-21 15:53:51,908 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (Thread-283 (HornetQ-client-global-threads-462057890)) ERROR: relation "my_seq_gen" does not exist

Я использую базу данных postgres, и мой идентификатор сгенерирован автоматически

  @Id
@SequenceGenerator(name="seq-gen",sequenceName="MY_SEQ_GEN"initialValue=205, allocationSize=12)
@GeneratedValue(strategy= GenerationType.SEQUENCE, generator="seq-gen")
@Column(name=""ID"",unique=true,nullable=false)
private int id;

Это мой фрагмент кода вставки пакета

getEm().getTransaction().begin();
System.out.println("transaction started--------------");
try {   
    for (Receipt ReceiptEntity : arrReceiptEntity) {
            getEm().persist(ReceiptEntity);
    }
    getEm().getTransaction().commit();
    System.out.println("commited");
} catch (Exception exception) {
    System.out.println("error----------------------------------------------------------------------");
    if(getEm().getTransaction().isActive())
        getEm().getTransaction().rollback();
    LOG.error(exception);
} finally {
    getEm().flush();
    getEm().clear();
    getEm().close();
}

Я добавил следующее свойство в persistence.xml

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

Пожалуйста, предложите, что я делаю неправильно.

Понравилась статья? Поделить с друзьями:
  • Ошибка открытия файла в арм
  • Ошибка отношение by name уже существует
  • Ошибка открытия файла блокировок c program files
  • Ошибка относительной величины прямо пропорциональна
  • Ошибка открытия файла блокировок 1cv8ddb 1cd