【问题标题】:Query list of entities with embedded entity using objectify使用 objectify 查询具有嵌入式实体的实体列表
【发布时间】:2016-05-20 18:51:07
【问题描述】:

我有一个简单的@Entity 类,带有标准的@Id Long id 和几个字段。其中一个字段是地图。

@Entity
public class MyEntity{

@Id Long id;

@Index String fieldOne;  
@Unindex int fieldTwo;  
@Unindex int fieldThree; 
@Unindex Map<String, MyPojo> map = new HashMap<>();
}

根据我收集到的信息,Objectify 将此地图视为嵌入实体。 当我使用以下方式查询列表时:

List<MyEntity> list = ofy().load().type(MyEntity.class).filter("fieldOne =", fieldList).list();

查询执行得很好,但是当我尝试对列表做任何事情时,我得到了这个异常

java.util.ArrayList 无法转换为 com.google.appengine.api.datastore.EmbeddedEntity

使用这些方法后,当我触摸查询时也会引发此异常:

  Map<Long, MyEntity> query = ofy().load().type(MyEntity.class).ids(idsList);

   Map<Key<MyEntity>, MyEntity> query= ofy().load().keys(iterableOfKeys);

现在在一些测试中,我发现如果我将地图更改为

   @Unindex Map<String, Integer> map = new HashMap<>();

一切都很好。以上所有查询都有效,我可以对其进行迭代等等。所以我的问题是我错过了什么?我尝试这一切都是错的还是有更好的方法来解决这个问题?

我使用的是最新版本的 Objectify 5.1.12。

谢谢

【问题讨论】:

  • 你能发布完整的堆栈跟踪和 MyPojo 的定义吗?
  • 在没有解决它之后,我构建了一个工作来继续前进。看到您的评论后,我返回并恢复该字段以使用 Map 使其再次失败以收集堆栈跟踪,但它没有。现在一切正常。我很困惑。在此之前,我将地图字段作为索引列表,当我将其更改为 Unindex Map 时出现了问题。也许是索引导致了问题,并且索引更改需要几个小时才能发生。现在地图工作正常,我无法从客户端返回的 JsonMap 中获取 MyPojo。铸造不起作用。任何想法
  • 我真的不明白你在问什么。提问时,请描述导致问题的步骤并发布完整的堆栈跟踪。如果您在数据库中存储的数据不是 Java 类的“形状”,那么您可能会遇到各种问题。

标签: android google-app-engine objectify


【解决方案1】:

如果没有得到 MyPojo 的类定义,我假设它没有定义为 @Entity 从 Objectify 文档中:

值可以是任何可以作为字段持久化的类型,包括基本类型、嵌入对象和集合。

假设这是您的MyPojo,它应该如下所示:

  @Entity
  class MyPojo {
      String firstName;
      String lastName;
      Integer age;
  }

它适用于您的更改的原因是因为您使用了基本类型作为地图的值。

【讨论】:

    【解决方案2】:

    当我修改现有实体的结构并在更改后对其进行查询时遇到了同样的问题。

    【讨论】:

    • 这个回答如何回答这个问题?
    猜你喜欢
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 2012-02-26
    • 2018-12-31
    • 1970-01-01
    • 2020-11-28
    • 2021-07-28
    • 1970-01-01
    相关资源
    最近更新 更多