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

问题描述 投票:0回答:2

我很难找到如何在春天从@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发送get请求,然后检索与该用户关联的所有GroupAccount对象。稍后,我将希望能够查看与特定GroupAccount关联的所有用户

java json spring spring-boot
2个回答
0
投票

你应该在@JsonIgnore上使用groupMembers注释,以避免陷入无限递归。

@ManyToMany(fetch = FetchType.LAZY)
@JsonIgnore
@JoinTable(name = "groupAccount_users",
                joinColumns = {@JoinColumn(name = "groupAccount_id")},
                inverseJoinColumns = {@JoinColumn(name = "user_id")})
private List<User> groupMembers = new ArrayList<>();

0
投票

您必须覆盖User类中的“toString”方法,此值的评估会导致堆栈溢出异常。你可以很容易地调试它并检查它。

© www.soinside.com 2019 - 2024. All rights reserved.