重置h2中的自动增量

mar*_*vov 7 java h2 playframework

我正在测试一个返回json响应的控制器但是第一次测试失败,因为h2数据库没有重置自动增量id.手动使用夹具或创建对象也存在同样的问题.

@Before
public void setUp() {
    Fixtures.deleteAllModels();
    Fixtures.loadModels("data.yaml");
}
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题呢?

dwi*_*wi2 19

启动您的播放应用,使用此网址启动浏览器(如果您在本地运行播放应用):

http://localhost:9000/@db
Run Code Online (Sandbox Code Playgroud)

输入你的h2 db,然后输入以下命令并运行:

ALTER TABLE <table_name> ALTER COLUMN <column_name> RESTART WITH 1
Run Code Online (Sandbox Code Playgroud)

如果您想以编程方式执行此操作,Fixtures.executeSQL()可能会有用

有关更多信息,请访问http://www.h2database.com/html/grammar.html#alter_table_alter


Ben*_*ert 5

如果您正在使用 Spring,我发现这篇博客文章建议使用@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)

这样每个测试都使用新的应用程序上下文,从而重置数据库增量。

  • 这将使测试变得非常慢 (13认同)