有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准 https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。https://store.amazingmemo.com/chapterDetail/1685324709017001`
在 JPA 中,实体之间的关联关系是通过注解来定义的。以下是一些常用的关联关系注解:
@OneToOne
表示一对一的关系。当两个实体类中的每一个实例只能与另一个实体类中的一个实例相关联时使用。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| @Entity public class User { @Id @GeneratedValue private Long id;
@OneToOne private Profile profile; }
@Entity public class Profile { @Id @GeneratedValue private Long id;
@OneToOne(mappedBy = "profile") private User user; }
|
@OneToMany
表示一对多的关系。当一个实体类的一个实例可以与另一个实体类的多个实例相关联时使用。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| @Entity public class User { @Id @GeneratedValue private Long id;
@OneToMany(mappedBy = "user") private List<Post> posts; }
@Entity public class Post { @Id @GeneratedValue private Long id;
@ManyToOne private User user; }
|
@ManyToOne
表示多对一的关系。当多个实体类的实例可以与另一个实体类的一个实例相关联时使用。
示例:
1 2 3 4 5 6 7 8 9
| @Entity public class Post { @Id @GeneratedValue private Long id;
@ManyToOne private User user; }
|
@ManyToMany
表示多对多的关系。当多个实体类的实例可以与另一个实体类的多个实例相关联时使用。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| @Entity public class Student { @Id @GeneratedValue private Long id;
@ManyToMany private List<Course> courses; }
@Entity public class Course { @Id @GeneratedValue private Long id;
@ManyToMany(mappedBy = "courses") private List<Student> students; }
|
@JoinColumn
用于定义外键列的名称,并且可以用于 @OneToOne
、@OneToMany
和 @ManyToOne
注解中。
示例:
1 2 3 4 5 6 7 8 9 10
| @Entity public class User { @Id @GeneratedValue private Long id;
@OneToOne @JoinColumn(name = "profile_id") private Profile profile; }
|
@JoinTable
用于定义多对多关系中的连接表。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| @Entity public class Student { @Id @GeneratedValue private Long id;
@ManyToMany @JoinTable( name = "student_course", joinColumns = @JoinColumn(name = "student_id"), inverseJoinColumns = @JoinColumn(name = "course_id") ) private List<Course> courses; }
|
这些注解允许你定义实体之间的关系,并且 JPA 提供器会根据这些注解来生成相应的数据库表结构和查询。