java - 无法在 Spring Boot 应用程序中从 data.sql 导入 sql 插入脚本数据

标签 java spring-boot spring-data-jpa spring-data h2

我有一个非常基本的 Spring Boot 应用程序,其中包含 schema.sqldata.sql,它创建了 H2 DB 架构并分别导入数据。

我的schemaH2 DB中生成得很好,但由于某种原因数据没有被导入。我在表中看到 0 条记录。

我也没有看到任何错误。

看起来像是配置问题。请指导。

enter image description here

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/

相关文章:

java - JFileChooser 中的滚动条出错

java - Android - 广播接收器不记录消息

java - 当必须执行步骤 2 时,处理步骤 1 中异常的最佳方法是什么

java - 如何在使用 Spring Boot 时通过在浏览器中点击 URL 来加载 Angular 组件?

java - 如何将 JDBI 添加到 Spring Boot 应用程序中?

java - 从磁盘读取图像时出现 ArrayOutOfBoundsException

java - Spring Boot 2 - 无法在 null 上找到属性或字段 'entitiesProperties'

带有 JPA 的 Spring Data 不会在错误时回滚事务

java - spring data jpa 是否做缓存

spring - 尝试找到一种更语义化的方式在 Kotlin 中编写 Spring Entity