java - Hibernate 关闭时运行脚本

标签 java spring hibernate junit

我正在使用 Hibernate 来管理测试套件,并且我需要在关闭时运行自定义脚本。我已找到该特性:

hibernate.hbm2ddl.import_files 

在启动时运行脚本,但我找不到类似的关闭属性的文档。

更具体地说,我的导入脚本正在创建自定义表(由于我无法更改,因此无法通过注释创建该表),并且我需要在测试运行后删除这些自定义表。我正在使用

hibernate.hbm2ddl.auto=create-drop

这会破坏测试创建的其他表,但不会破坏导入脚本中创建的表。

正在使用的其他技术包括 Spring、JUnit、Postgres 和 Maven,以防有人有涉及我可以用来实现相同目标的 hack。

编辑:为了澄清,我正在寻找一种方法让 Hibernate 运行脚本来在测试套件完成运行后删除一些表。

最佳答案

没有办法通过 hbm2ddl 来做到这一点。但是,您可以将数据源连接到测试套件中,然后直接通过数据源删除表。如果您选择这条路线,您可能会发现以相同的方式进行创建比使用 hibernate.hbm2ddl.import_files 更干净。像这样的东西:

@ContextConfiguration(locations = {"spring-dao-test.xml"})
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
public class ExampleDaoTest extends extends AbstractTestNGSpringContextTests {

    private static final Logger log = Logger.getLogger(ExampleDaoTest.class);

    @Resource
    private DataSource dataSource;

    @BeforeMethod
    private void createExtraTables() {
        try {
            log.info("Creating table extra_table");
            dataSource.getConnection().createStatement().execute("CREATE TABLE extra_table ( id number(4) not null )");
        } catch(SQLException se) {
            log.error("Unable to create table extra_table", se);
        }
    }

    @AfterMethod
    private void dropExtraTables() {
        try {
            log.info("Dropping table extra_table");
            dataSource.getConnection().createStatement().execute("DROP TABLE extra_table");
        } catch(SQLException se) {
            log.error("Unable to drop table extra_table", se);
        }
    }

    @Test
    public void testSomeStuff() {

    }
}

关于java - Hibernate 关闭时运行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24299965/

相关文章:

java - 如何在Java中从文件中读取特定数量的字节到字节数组中?

java - 如何将日期转换为 yyyy-MM-dd 格式?

java - 两种 JDBC 查询批处理方法中哪一种更快?

spring - 如果提供 WSDL,则使用 Spring 的 Web 服务消费示例

java - 无法在 servlet init 方法中构建 session 工厂

java - 使用 Spring AspectJ 进行日志记录的性能影响

java - 如果我使用spring data Rest+spring data jpa,是否能保证service层和Dao层的代码为零,需要手动编码?

java - @Profile 注释中的 AND 运算符

java - hibernate :PostgreSQL 驱动程序问题

java - Hibernate Session Factory 需要很长时间才能加载