【问题标题】:Missing Sequences in HSQL for testingHSQL 中缺少用于测试的序列
【发布时间】:2012-07-31 14:28:42
【问题描述】:

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

任何人对如何从日志中删除此垃圾有任何想法?

谢谢

【问题讨论】:

    标签: java database oracle spring hsqldb


    【解决方案1】:

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

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

    披露:不适用于 arquillian。

    【讨论】:

    • 这如何帮助我在数据库上设置序列?也许我在这里遗漏了一些东西。对不起,如果我是
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      改用H2 database;它有一个名为“Compatibility Modes”的特性,它的行为类似于 Oracle 或 HSQL。

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

      【讨论】:

      • 谢谢 Aaron,我会在午餐时间看看这个
      猜你喜欢
      • 2013-08-05
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 2020-10-03
      • 1970-01-01
      • 2020-05-27
      • 2011-12-29
      • 1970-01-01
      相关资源
      最近更新 更多