从@ManyToMany 双向关系中检索数据

我正在努力找出如何在春季从@ManyToMany 关系中检索数据。我遇到了无限递归问题并尝试了一些解决方案,例如使用@JsonIgnoreProperties,但无济于事。


一个用户可以有很多组,一个组可以有很多用户。我可以将用户添加到组中,但是在检索与用户关联的所有组时,我会从无限递归中得到堆栈溢出。


我的 GroupAccount 类:


@Entity

public class GroupAccount {


//Private variables omitted for brevity


@ManyToMany(fetch = FetchType.LAZY)

@JoinTable(name = "groupAccount_users",

                joinColumns = {@JoinColumn(name = "groupAccount_id")},

                inverseJoinColumns = {@JoinColumn(name = "user_id")})

private List<User> groupMembers = new ArrayList<>();


//Constructors, most getters, setters omitted for brevity


public void addUserToGroupParticipants(User user){

    groupMembers.add(user);

    incrementGroupMembers();

}


public void incrementGroupMembers() {

    numberOfMembers++;

}


public List<User> getGroupMembers(){

    return groupMembers;

}

}

我的用户类:


@Entity

public class User {


//Private variables omitted for brevity


@ManyToMany(mappedBy="groupMembers",

                        fetch = FetchType.LAZY)

private List<GroupAccount> groupAccounts = new ArrayList<>();


//Constructors, most getters, setters omitted for brevity


public List<GroupAccount> getUsersAccounts() {

    return groupAccounts;

}

}

理想情况下,我希望能够使用用户 ID 发送获取请求,然后检索与该用户关联的所有 GroupAccount 对象。稍后,我将希望能够查看与特定 GroupAccount 关联的所有用户


月关宝盒
浏览 135回答 2
2回答

MYYA

您应该使用@JsonIgnore注释groupMembers来避免陷入无限递归。@ManyToMany(fetch = FetchType.LAZY)@JsonIgnore@JoinTable(name = "groupAccount_users",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; joinColumns = {@JoinColumn(name = "groupAccount_id")},&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inverseJoinColumns = {@JoinColumn(name = "user_id")})private List<User> groupMembers = new ArrayList<>();

暮色呼如

您必须在 User 类中重写“toString”方法,对该值的评估会导致堆栈溢出异常。你可以很容易地调试它并检查它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java