我有一个非常基本的 Spring Boot
应用程序,其中包含 schema.sql
和 data.sql
,它创建了 H2
DB
架构并分别导入数据。
我的schema
在H2 DB
中生成得很好,但由于某种原因数据没有被导入。我在表中看到 0
条记录。
我也没有看到任何错误。
看起来像是配置问题。请指导。
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath/>
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
application.properties
hibernate.jdbc.batch_size=500
hibernate.show_sql=true
hibernate.format_sql=true
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:tcp://localhost/~/h2-dbs/demo-db
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
src/main/resources/schema.sql
drop table env if exists;
create table env (
id int auto_increment primary key,
name varchar(250) not null default 'DEV',
category varchar(250) not null default 'LOWER',
enabled char(1) not null default 'Y'
);
src/main/resources/data.sql
insert into env (name, category) values
('DEV','LOWER'),
('QA','LOWER'),
('PERF','HIGHER'),
('CT','HIGHER'),
('UAT','HIGHER'),
('PROD','HIGHER');
域/Env.java
@Entity
public class Env {
private int id;
private String name;
private String category;
private String enabled;
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.AUTO)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Basic
@Column(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Basic
@Column(name = "category")
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
@Basic
@Column(name = "enabled")
public String getEnabled() {
return enabled;
}
public void setEnabled(String enabled) {
this.enabled = enabled;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Env env = (Env) o;
return id == env.id &&
Objects.equals(name, env.name) &&
Objects.equals(category, env.category) &&
Objects.equals(enabled, env.enabled);
}
@Override
public int hashCode() {
return Objects.hash(id, name, category, enabled);
}
}
EnvRepository.java
@RepositoryRestResource
public interface EnvRepository extends PagingAndSortingRepository<Env, Integer> {
}
DemoRestApp.java
@SpringBootApplication
public class DemoRestApp {
public static void main(String[] args) {
SpringApplication.run(DemoRestApp.class, args);
}
}
最佳答案
您需要将其包含在属性文件中
spring.jpa.hibernate.ddl-auto=none
here有关于此的更多信息。正如您所看到的,文档中有注释说
In a JPA-based app, you can choose to let Hibernate create the schema or use schema.sql, but you cannot do both. Make sure to disable spring.jpa.hibernate.ddl-auto if you use schema.sql.
关于java - 无法在 Spring Boot 应用程序中从 data.sql 导入 sql 插入脚本数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58293453/