Spring使用Hibernate导入SQL

Spring使用Hibernate导入SQL,sql,spring,hibernate,spring-boot,Sql,Spring,Hibernate,Spring Boot,我想在运行初始sql文件时使用Hibernate。我目前遇到的问题是,我得到了以下异常:我希望HIBERNATE插入ID而不是数据库 Caused by: java.sql.SQLException: Field 'id' doesn't have a default value 我的application.properties如下所示: spring.jpa.database-platform=org.hibernate.dialect.MariaDBDialect #Data Source

我想在运行初始sql文件时使用Hibernate。我目前遇到的问题是,我得到了以下异常:我希望HIBERNATE插入ID而不是数据库

Caused by: java.sql.SQLException: Field 'id' doesn't have a default value
我的application.properties如下所示:

spring.jpa.database-platform=org.hibernate.dialect.MariaDBDialect
#Data Source Settings
spring.datasource.url=jdbc:mariadb://localhost:3306/kotlin
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.dbcp2.test-while-idle=true
spring.datasource.dbcp2.validation-query=SELECT 1
spring.datasource.continue-on-error=false
#Add Initial Date for Testing
spring.datasource.initialization-mode=always
spring.jpa.hibernate.ddl-auto=create
spring.jpa.properties.hibernate.hbm2ddl.import_files=data.sql
我的用户模型包含:

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
var id: Long = 0
我的启动sql脚本:

INSERT INTO user (first_name, last_name, pass_word, user_name, version, email) VALUES ('deepak', 'sp', '$2a$10$2nU5xMCyzPMeNiGQsrjzQeWNcHf9NjtGzVFgy6kVRcZlLh/ABTgZW', 'spdeepak', 1, "example@example.com");
它似乎希望直接执行sql(不使用Hibernate生成的ID),而不是创建用户对象,然后插入数据

我在处理默认值时也会遇到这个错误(它说数据库中没有默认值)。因此,请不要只回答“使用GenerationType.IDENTITY)

尝试以下方法:

INSERT INTO user (id, first_name, last_name, pass_word, user_name, version, email) 
VALUES 
(null, 'deepak', 'sp', '$2a$10$2nU5xMCyzPMeNiGQsrjzQeWNcHf9NjtGzVFgy6kVRcZlLh/ABTgZW', 'spdeepak', 1, "example@example.com");
insert语句缺少id列,但它是必需的。如果提供空值,则db将通过usign autoincrement自动分配其值

关于hibernate为手动脚本生成id-这是不可能的。手动脚本直接执行到数据库,没有任何框架。这是纯jdbc语句sql脚本执行


我看到您正在根据属性文件使用jpa存储库。如果您希望由hibernate生成id,那么您应该通过jpa存储库创建您的用户。

hibernate应该为我而不是数据库这样做……这是实际的问题。但无论如何,谢谢。hibernate无法使用手动脚本。您应该将您的用户插入jpa存储库或为数据库提供有效的脚本。因为手动脚本按原样执行。这是我想要听到的答案。将其添加到您的答案中,我将接受它