我在内存数据库中的H2中插入一些带dbunit的testdata,进行更新,并希望在测试运行后从db中删除testdata。
我的JUnit @Before setup
databaseTester.setSetUpOperation(DatabaseOperation.INSERT);
databaseTester.setDataSet(testDataSet);
databaseTester.onSetup();
在JUnit测试方法中我得到了类似的东西
String sql = "UPDATE table SET column='valuenew' WHERE column='valueold'"
SQLQuery query = sessionHandler.createSQLQuery(sql);
query.executeUpdate();
我的JUnit @After拆解
databaseTester.setDataSet(testDataSet);
DatabaseOperation tearDownOperation = DatabaseOperation.DELETE;
databaseTester.setTearDownOperation(tearDownOperation);
databaseTester.onTearDown();
我甚至不确定是否执行了更新,但我得到的第一个异常是调用onTearDown时。
Caused by: org.h2.jdbc.JdbcSQLException: Zeitüberschreitung beim Versuch die Tabelle "DT405" zu sperren
Timeout trying to lock table "table"; SQL statement:
delete from PUBLIC.table where column = ? [50200-175]
好像桌子上已经有锁了。选择查询工作正常,但更新语句失败。
任何暗示出了什么问题?
相关: Timeout error trying to lock table in h2
更新: MVCC = true没有解决问题,我现在测试挂起的事务是否导致锁定