【问题标题】:AutoIncrement with HSQL, Hibernate and Spring and Tests使用 HSQL、Hibernate 和 Spring 以及测试的 AutoIncrement
【发布时间】:2012-02-08 17:16:03
【问题描述】:

我有一些从 JPA 实体创建 HSQL 数据库的集成测试。除了自动增量 ID,这一切都很好。这些似乎存储在测试之间而不是重置。例如,如果我在测试 1 中添加两个项目,那么这两行的 HSQL 中的 id 值是 1 和 2。在我的设置中,我然后销毁数据库。在测试 2 中,我添加了一项并且 id 为 3 而不是回到 1。我使用 Spring 作为事务管理器并连接我的所有依赖项。有谁知道这可能是什么原因造成的?

我不想检查 id 本身,但我确实觉得这很烦人。

提前致谢

【问题讨论】:

    标签: hibernate spring unit-testing hsqldb auto-increment


    【解决方案1】:

    这是意料之中的。自动递增 ID 由数据库处理,因此,除非您在每次测试之前删除表并重新创建它们(您不应该这样做),否则 ID 将继续递增。

    只是不要依赖测试中 ID 的绝对值。从您在设置测试用例时创建的实体中获取 ID 值。

    【讨论】:

      【解决方案2】:

      试试Unitils。该工具会为每个测试用例自动删除数据库表并重新创建它们。当然,您还可以选择其他选项。这些取自here

      • CleanInsertLoadStrategy:在删除数据集中指定的表中当前存在的所有数据后插入数据集
      • InsertLoadStrategy:只需将数据集插入到数据库中
      • RefreshLoadStrategy:使用数据集的内容“刷新”数据库的内容。这意味着更新现有行的数据并插入不存在的行。数据库中但不在数据集中的任何行均不受影响
      • UpdateLoadStrategy:用数据集的内容更新数据库的内容。这意味着更新现有行的数据。如果数据集包含不在数据库中的记录(即主键列具有相同值的记录),则失败。

      也许你觉得这个工具很有用。

      【讨论】:

        猜你喜欢
        • 2012-11-02
        • 2014-07-08
        • 1970-01-01
        • 2013-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-14
        • 1970-01-01
        相关资源
        最近更新 更多