Невозможно сгенерировать идентификатор UUID с помощью data.sql

#hibernate #spring-boot

#спящий режим #весенняя загрузка

Вопрос:

Без data.sql все работает.

Я использую Spring Boot 2 и базу данных H2.

Но когда я пытаюсь инициализировать author таблицу с помощью data.sql , я получаю сообщение об ошибке:

 Caused by: org.h2.jdbc.JdbcSQLException: 
NULL not allowed for column "ID"; SQL statement: insert into author (`name`) values ('Pushkin')
  

Вот Author сущность:

 @Entity
public class Author {
    @Id
    @GeneratedValue(generator = "uuid2")
    @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
    private UUID id;
    @Column(unique=true)
    private String name;

    //getters/setters/constructors
}
  

Вот data.sql :

 insert into author (`name`) values ('Pushkin');
  

Комментарии:

1. h2database.com/html/functions.html#random_uuid

Ответ №1:

UUIDGenerator работает только при хранении объектов с помощью JPA / Hibernate.

Когда вы выполняете обычный SQL в data.sql, спящий режим не используется. Вы должны следовать предложению JB Nizet http://www.h2database.com/html/functions.html#random_uuid

Ответ №2:

прежде всего, пожалуйста, проверьте, что у вас есть галочка автоматического увеличения в базе данных для идентификатора, который вы хотите сгенерировать, а затем напишите ниже в @ID, @GeneratedValue(strategy = GenerationType.ИДЕНТИФИКАТОР). это сделает ваш идентификатор уникальным.