2015-01-26 6 views
0

У нас есть следующая ситуация: сущность и pojo в Objectify v5. Как вы можете видеть, 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 в Entity, он отлично работает, но мы не понимаем, почему это так.

Большое спасибо!

ответ

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

Благодаря этой круговой зависимости (как показано в коде выше), объективировать никогда не сможет построить граф объектов.

Смежные вопросы