从连接中查询的列不适用于Postgresql,但不适用于Java中的Hsql

时间:2014-06-20 15:04:39

标签: java spring postgresql hsqldb

我遇到了奇怪的行为,我的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);
    }
}

0 个答案:

没有答案