Disable MySQL Foreign Key During JUnit Test

来源:互联网 发布:充值管理系统 源码 编辑:程序博客网 时间:2024/04/28 08:04

Sometimes in our integration tests, we don't want the foreign keys constraints, how to address this? look at my test for example:

@RunWith(SpringTestRunner.class)@DataLoader(filePaths = { "fixture/bdbslipUpdates.xls" }, loaderType = LoaderType.EXCEL)@ContextConfiguration(locations = "classpath*:applicationContext.xml")@ActiveProfiles("test")@TransactionConfiguration(transactionManager = "transactionManager")@Transactionalpublic class DefaultBdbslipUpdaterTest {@Autowiredprivate DefaultBdbslipUpdater bdbslipUpdater;@Autowiredprivate IBasSyncDao sdao;/** * Concern: performance. */@Beforepublic void disableForeignKey(){Session session = sdao.currentSession();session.doWork(new Work(){@Overridepublic void execute(Connection connection) throws SQLException {Statement s = connection.createStatement();s.execute("SET @@foreign_key_checks = 0;");s.close();}});}@Afterpublic void enableForeignKey(){Session session = sdao.currentSession();session.doWork(new Work(){@Overridepublic void execute(Connection connection) throws SQLException {Statement s = connection.createStatement();s.execute("SET @@foreign_key_checks = 1;");s.close();}});}

Note that 

(1) we use easy test framework and hibernate in this test, pay attention to how we get the JDBC Connection via Hibernate Session.

(2) Different databases have different syntax to disable/enable REFERENTIAL INTEGRITY, our example is FOR MYSQL ONLY. 

Reference:

[1] http://stackoverflow.com/questions/9957878/mysql-disable-referential-integrity

[2] http://stackoverflow.com/questions/9482731/how-to-get-jdbc-connection-from-hibernate-session

[3] http://www.objectpartners.com/2010/11/09/unit-testing-your-persistence-tier-code/

0 0
原创粉丝点击