Hibernate не создает автоматически последовательности в базе данных при использовании автоматического создания таблиц - PullRequest
5 голосов
/ 28 августа 2010

Я хочу автоматически создавать таблицы базы данных с помощью Hibernate и Postgresql, но я получаю ошибки о последовательностях.Можно ли автоматически создавать последовательности с помощью Hibernate или я должен сгенерировать последовательности вручную?

Пример моей сущности:

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

@Entity
@Table(uniqueConstraints = { @UniqueConstraint( columnNames =  { "id" }) })
@SequenceGenerator(name="SEQ_EXAMPLE_ID", sequenceName="example_id_seq", allocationSize=1)
public class Example {

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_EXAMPLE_ID")
    private Long id;

    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String g
}

Конфигурация Hibernate:

hbm2ddl.auto=create-drop
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
hibernate.show_sql=true 

Исключения:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.exception.SQLGrammarException: could not get next sequence value

org.postgresql.util.PSQLException: ERROR: relation "example_id_seq" does not exist

Ответы [ 4 ]

1 голос
/ 15 ноября 2015

Необходимо включить автоматическое создание схемы в application.properties, как описано в Документы Hibernate :

hibernate.hbm2ddl.auto = create

или при использовании Spring:

spring.jpa.hibernate.ddl-auto = create

Но общая рекомендация - не использовать это в работе , см. Hibernate: hbm2ddl.auto = обновление в работе?

Вместо этого используйте инструменты миграции схемы базы данных, такие как Liquibase или Flyway .

1 голос
/ 29 августа 2010

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

  • org.hibernate.tool.hbm2ddl: регистрировать все операторы SQL DDL по мере их выполнения

Установите значение DEBUG и проверьте операторы DDL (возможно, обновите вопрос соответствующими частями).

PS: allocationSize=1 не очень разумно, лучше использовать значение по умолчанию. Но это не имеет отношения.

Ссылки

  • Справочное руководство по Hibernate Core
0 голосов
/ 12 октября 2016

Вот мое решение. Применимо для Postgres

<hibernate-mapping>

  <!-- ... -->

  <database-object>
    <create>CREATE SEQUENCE my_sequence</create>
    <drop>DROP SEQUENCE IF EXISTS my_sequence</drop>
  </database-object>

</hibernate-mapping>
0 голосов
/ 05 октября 2014

-Мы не можем создавать последовательности, используя свойство hbm2ddl -мы можем создавать любое количество таблиц любое количество раз, но не последовательность

последовательность является специфической для дБ, и мы должны создать нашу собственную последовательность в дБ

...