Tor*_*ora 6 jpa h2 spring-data-jpa spring-boot
无法使用用于使用schema.sql创建表的脚本测试Spring Boot&H2。
因此,发生的事情是我设置了以下属性:
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.initialization-mode=always
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.platform=h2
spring.datasource.url=jdbc:h2:mem:city;MODE=PostgreSQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.generate-ddl=false
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
Run Code Online (Sandbox Code Playgroud)
并且,我希望用schema.sql文件被创建的表。该应用程序工作正常,当我运行gradle这个bootRun。但是,当我使用gradle test运行测试时,我对Repository的测试通过了,但是针对Service的测试却失败了,表明该表已经存在时它正在尝试创建表:
引发异常:
Caused by: org.h2.jdbc.JdbcSQLException: Table "CITY" already exists;
SQL statement:
CREATE TABLE city ( id BIGINT NOT NULL, country VARCHAR(255) NOT NULL, map VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, state VARCHAR(2555) NOT NULL, PRIMARY KEY (id) ) [42101-196]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
at org.h2.message.DbException.get(DbException.java:179)
at org.h2.message.DbException.get(DbException.java:155)
at org.h2.command.ddl.CreateTable.update(CreateTable.java:117)
at org.h2.command.CommandContainer.update(CommandContainer.java:101)
at org.h2.command.Command.executeUpdate(Command.java:260)
at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:192)
at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:164)
at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:95)
at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java)
at org.springframework.jdbc.datasource.init.ScriptUtils.executeSqlScript(ScriptUtils.java:471)
... 105 more
Run Code Online (Sandbox Code Playgroud)
代码已设置好,可以重新创建场景。README具有所有信息-> https://github.com/tekpartner/learn-spring-boot-data-jpa-h2
Mad*_*ave 17
如果单独运行测试,它们就会通过。我认为问题是由于对同一个数据库执行了两次 schema.sql。由于表已经存在,它第二次失败。
作为一种解决方法,您可以spring.datasource.continue-on-error=true
在application.properties
.
另一种选择是@AutoConfigureTestDatabase
在适当的地方添加注释,以便为每个测试使用唯一的嵌入式数据库。
the*_*NOD 16
您可以尝试其他两种可能的解决方案:
drop table if exists [tablename]
在创建表之前在 schema.sql 中添加一个。CREATE TABLE
为CREATE TABLE IF NOT EXISTS
归档时间: |
|
查看次数: |
5149 次 |
最近记录: |