我想使用liquibase在内存数据库的H2中创建Table并为我的测试插入一些数据:
<changeSet id="create_jobItem" author="m">
<createTable tableName="job_item" schemaName="service">
<column name="id" type="int" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="language" type="varchar(255)" />
<column name="description" type="text" />
</createTable>
</changeSet>
<changeSet id="add_jobItem1" author="m">
<insert tableName="JOB_ITEM" schemaName="service">
<column name="id">99989</column>
<column name="language">C#</column>
<column name="description">position for C#</column>
</insert>
</changeSet>
我尝试使用DAOTestRule从DB获取此行:
@Rule
public DAOTestRule database = DAOTestRule.newBuilder()
.addEntityClass(JobItem.class).build();
使用以下命令运行liquibase脚本:
Connection connection = DriverManager.getConnection(url, user, password);
database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(connection));
new Liquibase(脚本,新的ClassLoaderResourceAccessor(),数据库) .update((String)null);
但是当我打电话时
final long savedId = 99989L;
JobItem jobItem = database.inTransaction(() -> {
return dao.getById(savedId);
});
我有一个例外:
No entity found for query
javax.persistence.NoResultException:找不到查询的实体 在org.hibernate.query.internal.AbstractProducedQuery.getSingleResult(AbstractProducedQuery.java:1461)
我认为这是因为Db的不同实例,但如何链接以及如何为所有测试仅制作一个H2实例
我的数据库属性:
datasourceFactory:
driverClass: org.h2.Driver
user: sa
password:
url: jdbc:h2:mem:jobservice;INIT=create schema if not exists jobservice\;set schema service
validationQuery: "/* MyService Health Check */ SELECT 1"
logValidationErrors: true
initialSize: 2
minSize: 2
maxSize: 8
minIdleTime: 1 minute
properties:
hibernate.dialect: org.hibernate.dialect.H2Dialect
hibernate.default_schema: lis
hibernate.id.new_generator_mappings: false
hibernate.show_sql: false