JPA#ManyToMany

多对多,多个学生选了多个课程。

 


 


涉及到的注解(注解的使用看注释):
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值