我想比较两个Savepoints,并检查两者之间是否有任何提交数据库。例如,请考虑以下代码段
Savepoint save1 = connection.setSavePoint("before);
// some processing happens here, which can commit some changes to the DB.
process();
Savepoint save2 = connection.setSavePoint("after");
// Now compare the two savepoints to see if there were any commits in process() method
现在我要探索的是:有没有办法可以通过编程方式检查两个保存点之间是否有任何提交?
答案 0 :(得分:0)
The most simplest way would be having a Stack对象推送当前操作,例如DBOperationStack.push(new String[]("OPERATION_TYPE", "OPERATION_NAME", CURRENT_TIMESTAMP))
。
[这是普通的伪代码,更改数据结构,范围,并发等。]
您可以在数据库操作所需的任何位置添加上面的行。
当您从堆栈&到达 savepoint_2 ,peek
时检查它是否 savepoint_1 ,如果不是,那么它们之间可能会有更新,插入等最近的操作。
COMMIT, PROCESS_XYZ, 2016-01-29 15:03:08.713
SAVEPOINT, SAVEPOINT_1, 2016-01-29 15:02:08.713
答案 1 :(得分:0)
针对我的问题发布解决方案。
我使用了这样一个事实:如果在它之后有任何提交操作,保存点将被刷新。因此,回滚到同一个保存点会抛出一个从未建立保存点的错误。如果它成功回滚,那就意味着它们之间没有提交操作。