Objectify v4 Ref.get()抛出ClassCastException

时间:2013-07-07 14:55:39

标签: objectify

我基本上有两个班级:

@Entity 
class A {
   @Load
   Ref<B> other;

   public B getOther() {
      return other.get();
   }
}

@Entity
class B {
   ...
}

当我调用someInstanceOfA.getOther()时,它会抛出:

java.lang.ClassCastException: com.google.appengine.api.datastore.Entity cannot be cast to objectify.example.B

我正在使用objectify v 4.0b3。

谢谢!

3 个答案:

答案 0 :(得分:3)

我发现了问题,我正在回答这个问题,因为它可能会发生在其他人身上。底线是:My Guice容器在不同的点注入了不同的客观化工厂,所以我最终得到了一个注册所有实体的上下文,另一个没有注册实体,ClassCastException来自第二种情况。 / p>

然后我阅读Jeff's recommendation并更改我的应用程序以使用静态调用Objectify而不是DI。

现在一切正常。

答案 1 :(得分:0)

在我的情况下,我使用提到的静态方法注册我的实体,但我仍然收到错误。 如客观化常见问题中所述,这意味着在将类注册为实体之前已加载实体。这似乎是一个客观化的实施问题。 所以对我来说简单但粗暴的黑客是在失败的操作(OfyService.factory()。register())之前注册实体并且它有效。 希望这有助于某人。

答案 2 :(得分:0)

我在更改一个实体类的名称后开始收到此错误。另一个实体有一个引用旧实体名称的Key。在这种情况下,您应该更新或保存所有引用旧实体名称的实体

重命名实体时请记住这一点