java - 在 Spring 中保存两个模型之间的多对多关系
问题描述
我有两个具有多对多关系的模型。我为每一个创建了存储库、服务和控制器层。现在,当我向它们中的每一个发出 POST 请求时,它就会被创建,但是我们如何在它们之间建立连接,因为创建了第三个表,其中包含每个模型的 PK。GET 请求也是如此,它返回一个空列表。
任何人都可以向我解释如何在具有多对多关系的两个模型中发布和获取并在它们之间建立链接。
谢谢
解决方案
根据您对 JPA 的实现,您可以通过注释模型字段来实现关系。例如这里我使用 Hibernate 和 java.persitence 注释来实现关系。我有一个包含 sAccount
列表的类Subject
。同样, mySubject
有一个Account
s 列表作为字段。为了映射关系,我以这种方式使用 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 对象在哪里。
推荐阅读
- django - Django Auth:“此字段是必需的”
- html - 在 Ruby 中使用 Nokogiri 抓取特定标题
- google-sheets - “收到无效的 JSON 有效负载。” 创建新工作表时
- swift - FloatingPoint 扩展 - 与其他 FloatingPoint 类型一起初始化
- php - 关于php7统一变量语法、嵌套函数
- mysql - 在 MySQL 中使用条件查找下一行
- python - 如何在 Tkinter 应用程序中启用对表情符号的支持?
- assembly - 寄存器地址存储在另一个寄存器中(PIC18F45K50)
- c# - C# 保存有关文件的附加信息
- onesignal - OneSignal - 在哪里可以找到现有项目的“高级选项部分”