代码之家  ›  专栏  ›  技术社区  ›  ripper234 Jonathan

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

  •  5
  • ripper234 Jonathan  · 技术社区  · 15 年前

    我想在一个集成测试到另一个集成测试之间截断所有数据库表。使用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();
                }
            });
    

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

    4 回复  |  直到 15 年前
        1
  •  3
  •   Sean Patrick Floyd    15 年前

    我想你可能不用弹簧。如果你做了, Spring's transactional test support

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

    或许你可以模仿这种机制:

    @Before 方法,在 @After 方法。

        2
  •  0
  •   Jinesh Parekh    15 年前
        3
  •  0
  •   David Gelhar    15 年前

    您可以使用 SchemaExport ,尽管这看起来很沉重。回滚事务听起来是个更好的主意。

        4
  •  0
  •   Sean Patrick Floyd    15 年前

    如果你没有那么多的测试,但是测试时间很长,你可以用这种方法。