#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:
UUIDGenerator работает только при хранении объектов с помощью JPA / Hibernate.
Когда вы выполняете обычный SQL в data.sql, спящий режим не используется. Вы должны следовать предложению JB Nizet http://www.h2database.com/html/functions.html#random_uuid
Ответ №2:
прежде всего, пожалуйста, проверьте, что у вас есть галочка автоматического увеличения в базе данных для идентификатора, который вы хотите сгенерировать, а затем напишите ниже в @ID, @GeneratedValue(strategy = GenerationType.ИДЕНТИФИКАТОР). это сделает ваш идентификатор уникальным.