如何使用hibernate执行sql-script文件?

时间:2010-01-15 12:38:04

标签: unit-testing hibernate import sql-scripts

我会写几个综合测试,测试与db的交互。 对于每个测试,我需要有一个db的特定快照。每个数据库快照都保存在.sql文件中。 我想要的是在某些测试方法中执行某些脚本文件,如下所示:

@Test
public void test_stuff(){
   executeScript(finame.sql);

   ... testing logic ...

   clean_database();
}

hibernate有没有办法做到这一点?

4 个答案:

答案 0 :(得分:3)

  • 您可以在启动hibernate时自动执行SQL脚本:将您的SQL命令写入名为import.sql的文件中,并将其放在CLASSPATH的根目录中。

  • 您不需要为测试清理数据库,只需在每次测试结束时将测试作为事务处理进行回滚。因此,您确定您的数据库未受到测试的污染。例如,使用Spring:

    @Transactional
    @TransactionConfiguration
    public class MyTest {
    ...
    }
    

如果您不使用Spring,请尝试使用默认回滚事务支持的测试框架。

答案 1 :(得分:2)

不推荐使用的Session.connection()方法主题是here

答案 2 :(得分:0)

您可以通过hibernate会话实例获取底层JDBC连接:

https://www.hibernate.org/hib_docs/v3/api/org/hibernate/Session.html#connection()

所以你可以编写你的executeScript()方法来获取文件名和一个hibernate会话并读取文件并在jdbc连接上执行sql。

HTH

答案 3 :(得分:0)

你听说过Hypersonic SQL吗?它是一个内存数据库,其中所有表都驻留在内存中,然后进行测试(使用读取,更新,插入,删除),最后当您关闭时,所有数据都消失了。详情请见:http://www.hsqldb.org/