JPA#ManyToMany 拼搏现实的明天。 2021-11-17 03:14 218阅读 0赞 多对多,多个学生选了多个课程。 -------------------- 涉及到的注解(注解的使用看注释): ManyToMany JoinTable JsonIgnoreProperties -------------------- @Entity @Table(name = "t_student") public class Student { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Integer id; @Column(name = "name") private String name; /** * 多对多映射关系中,需要一个中间表记录这种多对多的关系。 * * 中间表通过JoinTable.name定义中间表,表名称。 * 通过JoinTable.joinColumns定义一方的主键 * 通过JoinTable.inverseJoincolumns定义另一方的主键 * * * 在多对多的映射关系中,忽略某些字段的json序列化尤其特别重要, * 否则就会产生大量的冗余数据。 * JsonIgnoreProperties注解,只会对被注解的属性的直接字段起作用, * 比如下面的@JsonIgnoreProperties({"students"})作用于courses, * 就会给course里面每一个course的students属性过滤掉,理解这一点显得尤其特别重要。 * * ----------------------------------------------------------------------------------- * 补充: * 1.joinColumns用于定义当前表主键在关系表中的外键 * 2.inverseJoinColumns用于定义对方表的主键在关系表中的外键 * 3.多对多映射中对方表的字段,不用也写上JoinTable注解,只需要在ManyToMany注解中加入mappedBy并指定合适的值就行了 */ @ManyToMany @JoinTable( name="t_course_student", joinColumns= {@JoinColumn(name="student_id")}, inverseJoinColumns= {@JoinColumn(name="course_id")} ) @JsonIgnoreProperties({"students"}) private Set<Course> courses; } @Entity @Table(name="t_course") public class Course { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") private Integer id; @Column(name="name") private String name; // 第一种写法 // @ManyToMany // @JoinTable( // name="t_course_student", // joinColumns= {@JoinColumn(name="course_id",referencedColumnName="id")}, // inverseJoinColumns= {@JoinColumn(name="student_id")} // // ) // @JsonIgnoreProperties({"courses","classroom"}) // 第二种写法 @ManyToMany(mappedBy="courses") @JsonIgnoreProperties({"courses","classroom"}) private Set<Student> students; } —— 转载于:https://www.cnblogs.com/luohaonan/p/11245646.html
还没有评论,来说两句吧...