7

我有一个 Oracle 数据库,我必须在其中使用序列作为主键。这一切都很好,因为我可以控制序列号。我的问题是我的测试。使用 Spring 我创建了一个 HSQL 数据库并对此进行测试。这个数据库是通过查看我所有的实体来构建的。为了使用 Oracle,我的所有实体都指定了一个序列名称。问题是,当我构建 HSQL 数据库时,它找不到序列(我期望的)我的测试通过了,但我最终在日志中发现了很多垃圾。日志中充满了这类消息。

WARN JDBCExceptionReporter:233 - SQL Error: -5501, SQLState: 42501
ERROR JDBCExceptionReporter:234 - user lacks privilege or object not found: GENDERS_SEQ

有谁知道如何消除这些虚假错误?我可以让 HSQL 忽略这些序列吗?有趣的是,在测试中我可以插入 HSQL 数据库,所以它必须使用自己的内部主键生成器。

关于如何从日志中删除此垃圾的任何想法?

谢谢

4

3 回答 3

3

我通过手动创建序列作为测试脚本的一部分解决了这个问题。不理想,因为我宁愿 Spring/HSQL 组合设置它。我的代码是:

for (String sequence : sequences) {
    entityManager.createNativeQuery("DROP SEQUENCE " + sequence + " IF EXISTS").executeUpdate();
    entityManager.createNativeQuery("CREATE SEQUENCE " + sequence + " as INTEGER").executeUpdate();
}

其中序列是一个字符串列表,它们是序列名称。

我使用这是每个测试类的@BeforeClass 方法。不理想,但确实解决了问题

于 2012-08-09T08:12:48.090 回答
1

改用H2 数据库;它有一个称为“兼容模式”的特性,在该特性中它的行为类似于 Oracle 或 HSQL。

选择 Oracle 模式时,您应该能够使用您在生产中使用的相同脚本(或 Hibernate 设置)来初始化数据库。

于 2012-08-09T08:28:01.157 回答
-2

您可以通过脚本构建自己的内存数据库:how-to-initialize-in-memory-hsqldb-using-script-via-spring

但我更喜欢使用arquillian进行数据集成测试。

披露:不适用于 arquillian。

于 2012-08-05T17:25:10.877 回答