当前位置: 首页 > 知识库问答 >
问题:

更改实体后,GAE数据存储查询有时无法工作

辛弘壮
2023-03-14

我想弄清楚我看到的一个问题。我注意到,当我通过添加一个新字段来更改实体对象定义时,有时我不再能够从数据存储中已经存在的先前记录中获得结果。例如,在下面的示例中,我可以看到数据存储中的实体,但我得到了以下异常:

        String queryString = "select from " + MyEntity.class.getName()
                + " myentity where myentity.key = :key";

        Key keySub = KeyFactory.createKey("MyEntity", myEntityId);

        Query query = em.createQuery(queryString);
        query.setParameter("key", KeyFactory.keyToString(keySub));

        try {
            MyEntity myEntity = (MyEntity) query.getSingleResult();
            em.close();
            return myEntity;
        } catch (Exception e) {         
            log.severe(e.getMessage());
            em.close();
        }

共有1个答案

卞嘉许
2023-03-14

其实我发现了问题所在。这和我改变我的实体无关。这就是我如何坚持和合并我的实体。我在一个无主双向关系中的两个实体之间有一个无主关系,并且我在持久化我的实体之前添加了对彼此的引用。这是在建立一种自己的关系。因此,当我使用我的键进行查询时,我没有找到它,因为实体上的实际键是一个子键,当我试图将它作为父键进行查询时。

所以在双向关系中相互添加关系之前,我需要持久化我的两个实体。然后我就可以合并它们了。这将为每个实体创建一个父键,然后我可以在双向关系之间创建我的关系。

 类似资料:
  • 但结果是一样的。 这是我的.hbm.xml文件中的内容: 对于用户: 我做错了什么?如果查询参数不是“简单”类型,我需要做一些特殊的事情吗?

  • 假设我们有一个带有自定义方法的Spring数据存储库接口... 此方法只是设置实体的 deletedAt 字段,ok。有没有办法允许此方法返回 的更新版本? 明显地 …不起作用,因为… java.lang.IllegalArgumentException:修改查询只能使用void或int/Integer作为返回类型! 安宁是否知道另一种轻松允许这种情况的方法,当然除了明显的“在存储库和调用者之间添

  • 问题内容: 进行GAE / J数据存储区备份的最简单方法是什么? 看起来好像有python bulkloader.py工具可以为Python应用程序执行备份,但是我应该怎么做才能备份Java应用程序?有什么方法可以使用python工具吗? 问题答案: 可以使用python工具bulkloader.py创建GAE Java应用的数据存储备份。您只需通过在web.xml中添加以下几行来设置remote

  • 问题内容: 我打算存储商店的工作时间。我想知道在工作时间字段中最好的建模方法是什么,这样我就可以以非常有效的方式获得当前时刻开/关商店的列表。 问题答案: 要存储正常的工作时间,您需要存储一些记录,其中包含: 商店-INTEGER DayOfWeek-整数(0-6) 营业时间-TIME 关闭时间-TIME 例如,我假设每个商店在国定假日减少工作时间或关闭工厂,因此您还需要存储一些替代记录: 商店-

  • 我正在尝试检索一些值而不是其他值。事实上,我想通过用户的名字来搜索他们。 我尝试使用和,但找不到正确的解决方案。 如您所见,我还添加了。如果我不添加那个部分,它就不会检索任何东西。我想要的只是从我在TextField中所写的内容开始检索值。

  • 问题内容: 我正在使用Go和Google Datastore在Google App Engine中构建目录应用程序。我正在使用datatore 的功能来管理不同的产品类别。这是一些数据的示例: 乐器是根实体。当我单击它时,我希望看到和,但是相反,我看到了所有到最后一个实体的后代。这不是我想要的。目前,我只对乐器的直接后代感兴趣。 像这样的一些帖子建议在数据存储区中创建一个字段来跟踪直接父母。但是,