一次搞定Jpa的@OneToMany和@ManyToMany注解
1.对于@OneToMany和@ManyToOne来说是一样,两张表互相维护,加入mappedBy="",由被控方维护的表,增加外键即可。如果是没有增加上面类型,就会产生一个第三方表进行维护。
2.对于@ManyToMany注解来说,也是一样的,在这里需要注意一下,我们需要一个第三方表来维护多对多的关系,如果想要实现没有第三方表,可以采用两次多对一的关系结构。
3.实例:
男人-女人【一对多】
男人-爱好【多对多】
4.Man.java
@Entity @Table(name = "t_man") public class Man { @Id//主键 @GeneratedValue(strategy = GenerationType.IDENTITY)//自增长 private int id; private String name; //【主控方:一对多】男人有多个女人关系由 man 维护 @OneToMany(mappedBy = "man") private List<Women> womens; //【主控方:多对多】男人可以有多重爱好,爱好同时又属于多个男人 @ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)//级联保存,懒加载 //会创建一个man_hobby的维护表,关联man和hobby的id关系 @JoinTable(name = "man_hobby", joinColumns = {@JoinColumn(name = "man_id", referencedColumnName = "id")}, inverseJoinColumns = {@JoinColumn(name = "hobby_id", referencedColumnName ="id")}) private List<Hobby> hobbies; }
5.Women.java
@Entity @Table(name = "t_women") public class Women { @Id//主键 @GeneratedValue(strategy = GenerationType.IDENTITY)//自增长 private int id; private String name; //【被控方:多对一】女人对男人 @ManyToOne @JoinColumn(name = "manan_id", referencedColumnName = "id")//外键名称,参考主键 private Man man; }
6.Hobby.java
@Entity @Table(name = "t_hobby") public class Hobby { @Id//主键 @GeneratedValue(strategy = GenerationType.IDENTITY)//自增长 private int id; private String name; //【被控方:多对多】由被控方维护关系 @ManyToMany(cascade = CascadeType.REFRESH,mappedBy = "hobbies",fetch = FetchType.LAZY) private List<Man> mans; }
分类:
Spring
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具