java - 异常:查询结果集不可修改

标签 java exception jdo

我正在尝试使用以下代码写入 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();
    }

不幸的是,我收到“查询结果集不可修改”的异常。

我很确定它来自迭代的第一个查询,因为仅第二个查询就可以工作。

有什么想法需要更改才能使查询结果可修改吗?

最佳答案

我删除了 try/catch block 并得到了更详细的消息“java.lang.IllegalArgumentException:无法在单个事务中对多个实体组进行操作。”,这帮助我解决了我的问题。

我需要关闭事务:

pmfInstance.setNontransactionalRead(true);
pmfInstance.setNontransactionalWrite(true);

我不需要代码来确保事务安全。

在这里您可以找到更多信息: http://groups.google.com/group/google-appengine-java/browse_thread/thread/04f35b443c15d531

关于java - 异常:查询结果集不可修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3913583/

相关文章:

java - 双向一对多 JPA org.hibernate.exception.ConstraintViolationException

java - 如果以字符开头,则正则表达式不匹配

java - 如何从文件中获取数组输入,对其进行排序并在同一文件中显示输出

java - 如何更新 Google App Engine 中的实体

java - 无法在没有 JDO 注释的情况下使用 DataNucleus 增强器

java - 如何有效地随机重新插入数组中的元素

java - 初始化对象的正确方法是什么?

android - 如何使用 RxJava 2 处理错误异常?

c++ - 自制字符串类中的异常

java - Google App Engine - 数据以一种奇怪的方式存储