繁体   English   中英

Spring 进口 SQL 与 Hibernate

[英]Spring import SQL with Hibernate

我想在运行初始 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

我的用户 Model 包含:

@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");

您的插入语句缺少 id 列,但它是必需的。 如果您提供 null 值,则 db 将通过 usign autoincrement 自动分配其值。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM