当前位置: 首页 > 知识库问答 >
问题:

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

商品
2023-03-14

我很难找到如何在Spring中从@manytomany关系中检索数据。我遇到了无限递归问题,并尝试了一些解决方案,比如使用@JSONIgnoreProperties,但都没有成功。

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

@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关联的所有用户

共有1个答案

毕泽宇
2023-03-14

您应该在groupmembers上使用@jsonignore注释,以避免陷入无限递归。

@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<>();
 类似资料:
  • 问题内容: 我有两个以下列方式注释的实体类 如果我存储类“ B”的实例,则关系将存储在数据库中,并且类“ A”中的吸气剂将返回B的正确子集。但是,如果我对“ A”中的B列表进行了更改,更改是否不存储在数据库中? 我的问题是,我该如何做到使任一类的更改都“级联”到另一类? 编辑:我尝试过删除mapedBy参数和定义JoinTable(和列)的不同变体,但我一直找不到正确的组合。 问题答案: 最短的答

  • 我想在(您可以将其视为Student)实体和实体之间实现一个@ManyTomany单向的。很简单,一个教室可以有很多学生,而学生可以有很多教室。我希望它是单向的,因为我希望班级只知道它包含什么学生,学生不必知道他们有什么班级。这就是我目前所拥有的: ClassRoom.java Account.java 我通过以下代码保存它(使用Spring JPA): 但我得到了以下错误: 下面是StackTr

  • 我试图在用户和地址之间建立双向关系, 用户1-------->*地址 但是 地址1-------->1个用户 我在上网时得到了这些信息 > 对于一对一双向关系,拥有方对应于包含对应外键的方 双向关系的反向侧必须通过使用OneToOne、 OneToMany或ManyToMany批注的mappedBy元素来引用其 所属侧。mappedBy元素指定作为 关系所有者的实体中的属性或字段。 但如果我按照情

  • 我在JPA中定义了两个实体:Employee和Skill。 在这些实体之间定义了relationship@ManyTomany。 现在我有这样的问题:如果我删除技能实体使用实体管理器。它移除OK。但是在@jointable中,在数据库employee_skill中,仍然存在与这个被删除的实体(其id)的关联。 我不想在移除技能时移除员工,所以所有的级联移除或孤立移除在这里都不有用。 我考虑了为什么

  • 问题内容: 假设我有两个实体: 然后,我要保留“客户”实体,然后,参照先前添加的“客户”保留“订单”实体。当我从数据库中检索此客户并调用getOrders时,它将返回空集。这是正常行为吗?如果是,当我添加新的Order实体时,我该怎么做以自动刷新此集合? 问题答案: Jpa不会为您维护关系,因此应用程序需要设置双向关系的两端,以使它们与数据库保持同步。当您设置了order-> customer关系

  • 问题内容: 我正在为我的实习工作开发JPA兼容套件…该套件的一部分涉及测试极端情况的正确实现。 具有mapedBy属性。JPA指出: 字符串mappingBy-拥有关系的字段或属性。除非关系是单向的,否则为必需。 没有给出默认值-默认列为空。 给定双向-此示例来自JPA 2.0 JSR-317规范本身! 顾客 电话号码 尚未在of的中定义mapledBy属性!我不知道的双向映射有默认值吗? 我查看