我正在使用 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/