【发布时间】:2010-10-12 19:50:50
【问题描述】:
我正在尝试使用此代码写入 JDO 商店:
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
pm.currentTransaction().begin();
// deactivate all for current domain
Query q = pm.newQuery(CampaignStore.class, "domain == '" + domain +"'");
Collection result = (Collection) q.execute();
CampaignStore toBeEdited = null;
Iterator iter = result.iterator();
while (iter.hasNext()) {
toBeEdited = (CampaignStore) iter.next();
toBeEdited.setActive(false);
}
result.clear();
// set new one active
q = pm.newQuery(CampaignStore.class, "id == " + id);
result = (Collection) q.execute();
toBeEdited = (CampaignStore) result.iterator().next();
if (toBeEdited == null) {
LOG.log(Level.WARNING, "setActiveCampaign: Unable to find Campaign ID '"+ id +"'");
pm.currentTransaction().rollback();
return;
}
toBeEdited.setActive(true);
pm.currentTransaction().commit();
LOG.log(Level.INFO, "setActiveCampaign: Active Campaign ID is now '"+ id +"'");
}
catch (Exception e) {
pm.currentTransaction().rollback();
LOG.log(Level.WARNING, "setActiveCampaign: Exception: "+ e.getMessage());
} finally {
pm.close();
}
不幸的是,我收到“查询结果集不可修改”异常。
我很确定它来自带有迭代的第一个查询,因为单独的第二个查询就可以工作。
任何想法我需要更改以使查询结果可修改?
【问题讨论】:
-
为什么不直接发布堆栈跟踪?这会告诉你异常来自哪里。
-
这不是全部信息:“com.example.myproject.idea.server.AdminServiceImpl setActiveCampaign: setActiveCampaign: Exception: Query result sets are not modifiable” 我猜它没有更多细节,因为我自己处理错误。
-
我没有询问错误信息,我说的是“堆栈跟踪”。所有异常都有堆栈跟踪。 “e.printStackTrace”也许。
-
谢谢,我删除了 try/catch 块并获得了 StackTrace。然后更详细的消息是“jjava.lang.IllegalArgumentException:不能在单个事务中对多个实体组进行操作。”,这帮助我解决了我的问题