首页 > 解决方案 > 在 Spring 中保存两个模型之间的多对多关系

问题描述

我有两个具有多对多关系的模型。我为每一个创建了存储库、服务和控制器层。现在,当我向它们中的每一个发出 POST 请求时,它就会被创建,但是我们如何在它们之间建立连接,因为创建了第三个表,其中包含每个模型的 PK。GET 请求也是如此,它返回一个空列表。

任何人都可以向我解释如何在具有多对多关系的两个模型中发布和获取并在它们之间建立链接。

谢谢

标签: javaspring-bootjpamany-to-many

解决方案


根据您对 JPA 的实现,您可以通过注释模型字段来实现关系。例如这里我使用 Hibernate 和 java.persitence 注释来实现关系。我有一个包含 sAccount列表的类Subject。同样, mySubject有一个Accounts 列表作为字段。为了映射关系,我以这种方式使用 java.persitence 注释:

类 Account.java

private List<Subject> subjects;

@ManyToMany(cascade = { CascadeType.ALL })
@JoinTable(
    name = "account_subject", 
    joinColumns = { @JoinColumn(name = "account_id") }, 
    inverseJoinColumns = { @JoinColumn(name = "subject_id") }
)
public List<Subject> getSubjects() {
    if(subjects == null) {
        return new LinkedList<Subject>();
    }
    return subjects;
}

类 Subject.java


private List<Account> accounts;

@ManyToMany(mappedBy = "subjects")
public List<Account>  getAccounts() {
    return accounts;
}   

这将自动创建一个名为account_subject包含两列account_id和的连接表subject_id,并且该行将cascade = { CascadeType.ALL }确保对两个实体执行任何操作(更新、删除等)。

要使用 Hibernate 保存 Account 实体,您只需设置必填字段,例如:

List<Subject> mySubjects = new List<Subject>();
mySubjects.add(mySubject);
myAccount.setSubjects(mySubjects);

在你的存储库类中,我们使用 Hibernate 方法saveOrUpdate()来持久化

sessionFactory.getCurrentSession().saveOrUpdate(myAccount);

sessionFactory你的 Hibernate SessionFactory 对象在哪里。


推荐阅读