JPA#OneToMany

一对多,反过来就是,多对一。在进行一对多的映射中,往往也要处理多对一。


 

涉及到的注解(注解的使用看代码注释):

  • OneToMany
  • ManyToOne
  • 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;

	/**
	 * Student 和 Classroom是多对一的关系所以用到了ManyToOne注解。
	 * 
	 * 因此每一个Student实例也都有一个classroom实例,
	 * 所以student对应的数据库表个也就需要一个外键来关联classroom实例(通过JoinColumn.name),
	 * 同时通过JoinColumn.referencedColumnName来指出外键对应的主键名称。
	 * 
	 */
	@ManyToOne
	@JoinColumn(name="classroom_id",referencedColumnName="id")
	@JsonIgnoreProperties(value="students")
	private Classroom classroom;
	
	@Override
	public String toString() {
		return ReflectionToStringBuilder.toString(this, ToStringStyle.MULTI_LINE_STYLE);
	}
}

  

@Entity
@Table(name = "t_classroom")
public class Classroom {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "id")
	private Integer id;

	@Column(name = "name")
	private String name;

	/**
	 * 一个教室里面有多个学生,因此用到了OneToMany注解,所以Classroom实体类中就有了一个学生的集合属性。
	 * 集合就是多个值组成的属性,因此通过JoinColumn来定义一个外键的方式就行不通了。
	 * 
	 * 这里通过OneToMany.mappedBy来指出集合(students)中每一个元素(student)的classroom属性,通过classroom属性
	 * 来连接(或称为映射)一个教室和多个学生之间的关系。
	 * 
	 * 通过JsonIgnoreProperties注解避免出现序列化时候的死循环
	 */
	@OneToMany(mappedBy="classroom")
	@JsonIgnoreProperties(value="classroom")
	private List<Student> students;
}

  

 

 

_

 

转载于:https://www.cnblogs.com/luohaonan/p/11244773.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值