我有以下代码:
List<Assignment> assignments = objectContext.performQuery(assignmentQuery);
objectContext.commitChanges();
objectContext.deleteObjects(assignments);
objectContext.commitChanges();
我执行第一个commitChanges()
来提交所有查询。然后我清除了Cayenne的日志。在第二个commitChanges()
上,这会显示在日志中:
INFO:QueryLogger.logBeginTransaction:2013-07-10 07:37:11,214:---交易开始了。
信息:QueryLogger.logQuery:2013-07-10 07:37:11,218:INSERT INTO scheduler_assignment
...
信息:QueryLogger.logQuery:2013-07-10 07:37:11,241:从scheduler_assignment
删除
...
信息:QueryLogger.logCommitTransaction:2013-07-10 07:37:11,286:+++交易已提交。
我不明白为什么在我尝试删除时它正在执行INSERT语句。谁能解释一下?谢谢!
答案 0 :(得分:1)
唯一合乎逻辑的解释是你的ObjectContext是“脏的” - 除了这里显示的内容之外,它还包含其他未提交的对象。这可能由于各种原因而发生,最常见的是:
(1)ObjectContext范围太宽,对上下文的更改源自应用程序中的其他位置。
(2)在提交期间源自回调/侦听器的更改。
关于ObjectContexts范围的一些提示: