2017-04-18 230 views
1

我正在开发一个EclipseLink项目,其中一个用户可以“跟随”另一个社交媒体网站上可以完成的项目。我设置了一个User实体(引用一个名为users的表),其中有一个“追随者”(追随该用户的用户)和另一个“追随者”(用户正在追踪的用户)列表。该关系在名为followers的单独表格中定义,该表格包含后续用户标识(user_id)和以下用户标识(follower_id)的列。JPA导致无限递归和堆栈溢出错误的多对多关系

我的用户模型是这样的:

@Entity 
@Table(name = "users") 
@NamedQuery(name = "User.findAll", query = "SELECT u FROM USER u") 
public class User { 
    // other attributes 
    @ManyToMany(fetch = FetchType.LAZY) 
    @JoinTable(name = "follower", joinColumns = @JoinColumn(
     name = "user_id", referencedColumnName = "id"), 
    inverseJoinColumns = @JoinColumn(
     name = "follower_id", referencedColumnName = "id")) 
    private List<User> followers; 

    @ManyToMany(mappedBy = "followers") 
    private List<User> following; 

    // other getters and setters 
    public List<User> getFollowers() { 
     return this.followers; 
    } 

    public List<User> getFollowing() { 
     return this.following; 
    } 
} 

getFollowers()方法似乎很好地工作,但是当getFollowing()叫我收到了一堆控制台垃圾邮件,在一个StackOverflowException高潮:

com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion 
(StackOverflowError) (through reference chain: 
org.eclipse.persistence.indirection.IndirectList[0]- 
>org.myproject.model.User["followers"]- 
>org.eclipse.persistence.indirection.IndirectList[0]- 
>org.myproject.model.User["following"]- 
... 
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase 
.serializeFields(BeanSerializerBase.java:518) 
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize 
(BeanSerializer.java:117) 
at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer 
.serializeContents(IndexedListSerializer.java:94) 
at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer 
.serializeContents(IndexedListSerializer.java:21) 
... 

请让我知道我是否应该提供更多的堆栈跟踪。任何提示?

+2

@JacksonIgnore为您收集应解决您的问题 – ketrox

+0

的确是这样的(假设你的意思'@ JsonIgnore')。你是一个救星! – Ecliptica

+0

您可以反序列化而不会丢失信息吗? – efekctive

回答