问题描述
我正在使用通过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
);
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
添加到application.properties即可解决该问题。