我正在使用Hibernate来管理测试套件,我需要在关机时运行自定义脚本。我找到了这个属性:
hibernate.hbm2ddl.import_files
在启动时运行脚本,但我找不到关闭类似属性的文档。
更具体地说,我的导入脚本是创建自定义表(由于我无法更改的原因而无法通过注释创建),并且我需要在测试运行后删除这些自定义表。我正在使用
hibernate.hbm2ddl.auto=create-drop
正在销毁测试创建的其他表,但不会销毁导入脚本中创建的表。
正在使用的其他技术是Spring,JUnit,Postgres和Maven,以防任何人遇到涉及我可以用来实现相同目标的黑客攻击。
编辑:为了澄清,我正在寻找一种方法让Hibernate在测试套件运行完毕后运行一个脚本来删除一些表。
答案 0 :(得分:1)
无法通过hbm2ddl进行操作。但是,您可以将DataSource连接到测试套件中,然后直接通过数据源删除表。如果您走这条路线,您可能会发现它也更干净,也可以使用相同的方法来创建,而不是使用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() {
}
}