H2数据库转储

时间:2019-08-06 15:55:15

标签: hibernate spring-boot spring-data-jpa h2

我试图通过执行以下命令将数据从H2数据库转储到项目中的data.sql文件中:

SCRIPT TO '/home/mat/Projects/myapp/server/src/main/resources/data.sql'

转储数据并填充sql文件,但是当我重新启动应用程序时会引发异常:

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ADDRESS" already exists; SQL statement:
CREATE MEMORY TABLE "PUBLIC"."ADDRESS"( "ID" BIGINT DEFAULT (NEXT VALUE FOR "PUBLIC"."SYSTEM_SEQUENCE_D07A8597_940F_46CC_9CCA_78B64543126F") NOT NULL NULL_TO_DEFAULT SEQUENCE "PUBLIC"."SYSTEM_SEQUENCE_D07A8597_940F_46CC_9CCA_78B64543126F", "CITY" VARCHAR(255), "COUNTRY" VARCHAR(255), "HOME_NO" VARCHAR(255), "POSTAL_CODE" VARCHAR(255), "STREET" VARCHAR(255) ) [42101-199]

为什么?数据库及其数据应在启动时进行初始化,但看起来像hmm?首先生成项目中的实体,这就是为什么引发异常的原因?

我的app.properties文件:

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true

spring.jpa.show-sql=true

1 个答案:

答案 0 :(得分:2)

关闭应用程序并重新启动时。

您的脚本再次执行,并尝试创建新表,因此抛出表存在错误。

因此,您需要指定重新启动应用程序时发生的情况。

spring.jpa.hibernate.ddl-auto=update

如果您需要更新表格

使用表删除和重新创建表

spring.jpa.hibernate.ddl-auto=create-drop

您可以阅读以下链接的更多信息

How hibernate works

how hibernate works baeldung