2015-01-26 39 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) 
} 

由於這種循環依賴(在上面的代碼中示出),物化將永遠無法構建對象圖。