2012-08-02 64 views
7

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

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

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

任何关于如何从日志中删除这些文件的想法?

感谢

回答

3

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

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

其中序列是序列名称的字符串列表。

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

1

尝试用H2 database代替;它有一个名为“Compatibility Modes”的功能,其功能类似于Oracle或HSQL。

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

+0

谢谢亚伦,我会在午餐时看一看 – RNJ 2012-08-09 09:32:23

相关问题