java - 在 Spring 中保存两个模型之间的多对多关系

标签 java spring-boot jpa many-to-many

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

任何人都可以向我解释一下如何在具有多对多关系的两个模型中进行 POST 和 GET 并在它们之间建立链接。

谢谢

最佳答案

根据您的 JPA 实现,您只需通过注释模型字段即可实现关系。例如,这里我使用 Hibernate 和 java.persitence 注释来实现这种关系。 我有一个类 Account ,它有一个 Subject 列表。同样,我的 Subject 有一个 Account 列表作为字段。为了映射关系,我以这种方式使用 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_idsubject_id 以及行 cascade = { CascadeType .ALL } 将确保在两个实体上执行任何操作(更新、删除等)。

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

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

在您的存储库类中,我们使用 Hibernate 方法 saveOrUpdate() 来保存

sessionFactory.getCurrentSession().saveOrUpdate(myAccount);

其中 sessionFactory 是您的 Hibernate SessionFactory 对象。

关于java - 在 Spring 中保存两个模型之间的多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61154607/

相关文章:

java - 我希望 main 方法打印出值 x,该值是由正在运行的线程返回的

java - Selenium WebDriver 页面事件监听

java - CompletionService.take().isDone() 总是 true 吗?

java - JTabbedPane 鼠标悬停绘制问题

java - 需要创建新的计划流程的建议

java - Thymeleaf:检查是否定义了变量

spring-boot - if-unless 在 thymeleaf 引擎中给出相同的返回

hibernate - 调用刷新时Spring数据Jpa实体未托管异常

java - Hibernate with SQLite 无法在数据库创建后第二次运行应用程序

java - 已经有关联的托管连接错误