实体类别禁止填充数据库

问题描述

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

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对象?

解决方法

spring.jpa.hibernate.ddl-auto=none添加到a​​pplication.properties即可解决该问题。