【问题标题】: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:用数据集的内容更新数据库的内容。这意味着更新现有行的数据。如果数据集包含不在数据库中的记录(即主键列具有相同值的记录),则失败。
也许你觉得这个工具很有用。