0

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

严重:没有查询结果:SELECT FROM com.alero.services.model.MyEntity myEntity WHERE myEntity.key = :key

我将 JPA 与 GAE 数据存储一起使用。

我似乎能够纠正问题并再次开始获得结果的唯一方法是删除 appengine 生成的目录,然后重新创建实体。它是否以某种方式被缓存,如果是这种情况,我应该做些什么来让数据存储知道它需要删除缓存?

        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();
        }
4

1 回答 1

1

其实我发现了这个问题。这与我改变我的实体并没有真正的关系。这就是我坚持和合并我的实体的方式。我在无主双向关系中的两个实体之间有无主关系,我在持久化我的实体之前添加了对彼此的引用。这正在创建一种拥有的关系。因此,当我用我的键查询时,我没有找到它,因为当我尝试将实体上的实际键作为父键查询时,它是子键。

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

于 2013-04-08T04:14:36.907 回答