对于StaleObjectStateSession
您可以编写一个 JUnit 测试用例,例如
e1 = session1.load(key);
e2 = session2.load(key);
e2.modifyAnything();
e2.update();
e2.commit();
e1.modifyAnything();
e1.update();
然后你得到你的例外。顺便说一句,这StaleObjectStateSession
是一个 Hibernate 异常,而不是数据库异常。
为了测试一个真实的数据库异常,您可以违反数据库约束,例如编写一个 JUnit 案例,在该案例中您插入一个主键已经存在或在数据库上声明为 NOT NULL 的列中具有空值的行。
如果您只想测试一次并且想要避免编写 JUnit 测试用例的工作,那么您可以使用 eclipse 调试和 SQL 操作来完成:
您在代码中记录的加载和提交之间设置了一个断点。到达断点后,在 SQL 中,您手动删除此记录DELETE FROM table WHERE primary_key =...
并提交此修改,然后再继续执行。(您也可以UPDATE
选择行,但不要忘记更新版本列。)然后在 Eclipse 中继续执行程序。
另一个想法是暂时使一个可为空的列不为空ALTER TABLE table MODIFY(column ... NOT NULL)
。测试后,您必须撤消此修改。当然,这样的测试只应在专用测试数据库上进行,而不应在生产系统上进行。