2015-01-26 37 views
0

我们有以下情况:Objectify v5中的实体和pojo。 正如你所看到的,entityclass具有参考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变成实体,它可以正常工作,但我们不明白这是为什么。

非常感谢!

回答

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) 
} 

由于这种循环依赖(在上面的代码中示出),物化将永远无法构建对象图。