我遇到了奇怪的行为,我的JPA配置的集成测试失败了postgresql但传递给hsql。测试和断言方法没有代码更改。
我已经验证了表和列是否正确添加到数据库中。表存在的验证通过正常,但只有列检查意外失败。
这是什么原因?是否有解决方法或修复此问题?
测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=PersistenceConfig.class)
@Transactional
@TransactionConfiguration(defaultRollback=true)
public class UserMappingIntegrationTest {
@Autowired
EntityManager manager;
@Test
public void thatUserMappingWorks() {
assertTableExists(manager, "USER_TABLE");
assertTableHasColumn(manager, "USER_TABLE", "NAME");
}
}
断言方法:
public static void assertTableHasColumn(EntityManager manager,
final String tableName, final String columnName) {
SessionImpl session = (SessionImpl) manager.unwrap(Session.class);
final ResultCollector rc = new ResultCollector();
session.doWork(connection -> {
ResultSet columns = connection.getMetaData().getColumns(null, null,
tableName.toUpperCase(), null);
while (columns.next()) {
if (columns.getString(4).toUpperCase()
.equals(columnName.toUpperCase())) {
rc.found = true;
}
}
});
if (!rc.found) {
fail("Column [" + columnName + "] not found on table : "
+ tableName);
}
}