添加了附加测试(应使用@ActiveProfiles
)后,我得到了例外,当database-schema.sql脚本在同一数据库上运行两次时,就会出现这种情况。
spring:3.2.13.Release
和spring-data-jpa:1.6.5.RELEASE
和hsqldb:2.3.2
和hibernate-entitymanager:4.3.1.FINAL
junit:4.12
和spring-test:3.2.13.RELEASE
<jdbc:embedded-database id="dataSource">
中使用.../test/resources/spring/testConfig.xml
@RunWith(SpringJUnit4ClassRunner.class)
和@ContextConfiguration(locations = {"classpath:spring/testConfig.xml"})
用于我的两个测试@ActiveProfiles
进行的测试扩展了另一个测试<-我检查了是否是问题here的问题,但不是。在添加@ActiveProfiles
之后,必须重新创建春季竞赛,因为还有其他bean或其他设置取决于活动概要文件。但是似乎数据库没有删除。
我不想将schema.sql文件更改为
create table exampleModel if not exists
因为此脚本是定期自动生成的,并且在我的生产环境中,有许多自定义类型和表格,所以我不想手动对其进行编辑。
数据库的重用(因此没有为每个测试初始化数据库)
在mvn test
中运行./test/
java.lang.IllegalStateException: Failed to load ApplicationContext
...
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [spring/testConfig.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource': Invocation of init method failed; nested exception is org.springframework.dao.DataAccessResourceFailureException: Failed to execute database script; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement at line 1 of resource class path resource [testDB/schema.sql]: CREATE TYPE TEXT AS VARCHAR(1000000)
...
Caused by: java.sql.SQLSyntaxErrorException: object name already exists: TEXT in statement [CREATE TYPE TEXT AS VARCHAR(1000000)]
...
Caused by: org.hsqldb.HsqlException: object name already exists: TEXT
答案 0 :(得分:0)
要重用数据库架构,可以将hibernate.hbm2ddl.auto
(在testConfig.xml
中)的值更改为update
。参见:this
答案 1 :(得分:0)
按如下所示修改您的jdbc:embedded-database
标签:
<jdbc:embedded-database id="dataSource" generate-name="true">
有关更多详细信息,请参见与embedded database support相关的Spring文档。