实体类禁止填充数据库
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 解决了它。
【讨论】:
以上是关于实体类禁止填充数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 应用程序中从数据库表中填充实体