用hibernate截断所有表的最佳方法是什么?

rip*_*234 5 java integration-testing hibernate

我想在一个集成测试与另一个集成测试之间截断所有数据库表.使用hibernate执行此操作的最佳方法是什么?

目前我这样做:

public void cleanDatabase() {
        doWithSession(new Action1<Session>() {
            @Override
            public void doSomething(Session session) {
                SQLQuery query = session.createSQLQuery("truncate table stuff");
                // todo - generify this to all tables
                query.executeUpdate();
            }
        });
Run Code Online (Sandbox Code Playgroud)

(doWithSession是一个创建和关闭会话的小包装器).我可以使用反射迭代我所有的映射对象......我想知道是否有人已经解决了这个问题.

Sea*_*oyd 4

我猜你可能没有使用Spring。如果您这样做,Spring 的事务测试支持将是理想的。

简而言之:Spring 在每个测试用例之前自动启动一个事务,并在测试用例之后自动回滚它,为您留下一个空(或至少未更改)的数据库。

也许你可以模仿这个机制:

在方法中打开事务@Before,在方法中回滚事务@After

  • @ripper234你可以很好地断言东西,只要你在事务范围内这样做 (3认同)