我们有以下情况:Objectify v5中的实体和pojo。 如您所见,实体类具有对pojo的引用,如下所示:
@Entity
public class TestCustomer {
@Id
public Long id;
TestIbj ibj;
}
class TestIbj {
TestCustomer customer;
}
当我们尝试像这样保存时,这会导致StackOverflowError失败:
TestCustomer testCustomer = new TestCustomer();
OfyService.ofy().save().entity(testCustomer).now();
错误:
java.lang.StackOverflowError
at java.lang.Class.getMethod0(Class.java:2772)
at java.lang.Class.isCheckMemberAccessOverridden(Class.java:2214)
at java.lang.Class.checkMemberAccess(Class.java:2233)
at java.lang.Class.getDeclaredMethods(Class.java:1854)
at...
我们的问题是:为什么这不允许/失败?如果我们将pojo更改为Entity,它可以正常工作,但我们不明白为什么会这样......
非常感谢!
答案 0 :(得分:2)
StackoverflowError几乎总是意味着存在无限递归。在您的代码中也是如此:
@Entity
public class TestCustomer {
@Id
public Long id;
TestIbj ibj; // TestCustomer contains TestIbj
}
class TestIbj {
TestCustomer customer; // TestIbj contains TestCustomer (which further contains TestIbj.. and so on)
}
由于这种循环依赖(如上面的代码所示),objectify将永远无法构造对象图。