hibernate.hbm2ddl.auto не связывает последовательность с столбцом id - PullRequest
0 голосов
/ 07 мая 2018

Вопрос

Почему я получаю исключение NULL not allowed for column "ID" при выполнении INSERT INTO PUBLIC.MY_ENTITY (name) VALUES ('test name');?

Настройка

Я использую Spring Boot и Hibernate. Spring Boot запускается со свойствами:

hibernate.hbm2ddl.auto=update
spring.jpa.hibernate.ddl-auto=update

У меня есть сущность:

@Entity
@Table(name = "MY_ENTITY")
public class MyEntity {

    @Id
    @SequenceGenerator(sequenceName = "MY_ENTITY_SEQ", name = "MyEntitySeq")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MyEntitySeq")
    private Long id;

    @Column(unique = true, nullable = false)
    private String name;

    // getters & setters
    // ...
}

Таблица была сгенерирована при запуске приложения.

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

SELECT * FROM INFORMATION_SCHEMA.SEQUENCES WHERE SEQUENCE_NAME = 'MY_ENTITY_SEQ'

приписка

По какой-то причине Hibernate не связывает последовательность с автоматической генерацией идентификатора. Я могу решить проблему с помощью запроса ниже. Но как заставить Hibernate сгенерировать запрос ниже?

ALTER TABLE PUBLIC.MY_ENTITY ALTER COLUMN ID BIGINT DEFAULT (NEXT VALUE FOR PUBLIC.MY_ENTITY_SEQ) NOT NULL NULL_TO_DEFAULT SEQUENCE PUBLIC.MY_ENTITY_SEQ;
INSERT INTO PUBLIC.MY_ENTITY (name) VALUES ('test name');

1 Ответ

0 голосов
/ 07 мая 2018
  • Дайте @SequenceGenerator размер выделения: @SequenceGenerator(sequenceName = "MY_ENTITY_SEQ", name = "MyEntitySeq", allocationSize=1)
  • Проверьте используемый диалект
  • Установите для "hibernate.id.new_generator_mappings" значение "true"
...