HSQL中缺少序列以进行测试

我有一个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数据库,因此它必须使用自己的内部主键生成器。

任何有关如何从日志中删除此瑕疵的想法?

谢谢

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

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

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

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

请尝试使用H2数据库 ; 它有一个称为“ 兼容模式 ”的function,其行为类似于Oracle或HSQL。

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

您可以通过脚本构建自己的in-memory-db: how-to-initialize-in-memory-hsqldb-using-script-via-spring 。

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

披露:不适用于arquillian。