实体类禁止填充数据库

Posted

技术标签:

【中文标题】实体类禁止填充数据库【英文标题】:Entity class inhibits filling database 【发布时间】:2020-12-28 10:51:16 【问题描述】:

我正在开发一个带有通过 JPA 处理的 h2 数据库的 spring boot 应用程序。我按照那里的说明https://spring.io/guides/gs/accessing-data-jpa/。我从文件schema.sql 初始化了一个表debug

DROP TABLE IF EXISTS debug;
  
CREATE TABLE debug (
  id INT PRIMARY KEY,
  other INT
);

用另一个文件填充它data.sql:

INSERT INTO debug (id, other) VALUES
  (0, 1),
  (1, 2),
  (2, 3);

我进一步定义了一个实体对象:

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

import lombok.Data;
import lombok.NoArgsConstructor;

@Entity
@Table(name = "debug")
@Data
@NoArgsConstructor
public class DebugBE 
    
    @Id
    private int id;
    
    private int other;


我的 application.properties 只是:

spring.datasource.url=jdbc:h2:mem:h2db
spring.h2.console.enabled=true
spring.h2.console.path=/h2

spring.datasource.initialization-mode=embedded #default

版本是:

org.springframework.boot 插件:版本2.3.3.RELEASE

当我启动应用程序并在浏览器中检查 h2 控制台时,我可以看到表 debug 是空的。如果我注释掉 Table 注释,则该表将填充来自 data.sql 的值,但随后会创建一个空的 debugBE 表。

如果 debugBE 和 schema.sql 中的定义不匹配,我会收到错误消息,但没有。所以我猜@Table 带注释的类导致空表是预期的行为? 如何从data.sql 自动填充表格并将其读取为 BE 对象?

【问题讨论】:

你是如何填充表格的? @Andronicus 我用data.sql 文件填充表格。 Spring-boot 会自动执行此操作。但是在我添加DebugBE之后它就不再起作用了。 【参考方案1】:

spring.jpa.hibernate.ddl-auto=none 添加到application.properties 解决了它。

【讨论】:

以上是关于实体类禁止填充数据库的主要内容,如果未能解决你的问题,请参考以下文章

开发将定义 .mdf 数据库的实体框架类

如何在 Spring Boot 应用程序中从数据库表中填充实体

在使用 PostgreSQL 和 Spring Boot 时,是不是有禁止将其实体类命名为“用户”的规则?

Java包装类之实体类不要使用基本类型

三EasyExcel实现数据填充

三EasyExcel实现数据填充