JPA中映射关系详细说明(一对多,多对一,一对一、多对多)、@JoinColumn、mappedBy说明

本文详细介绍了JPA中四种关系映射(一对一、一对多、多对一、多对多)的实现方式,包括@JoinColumn、mappedBy的使用。强调了关系的所有方(owning side)和非所有方(non-owning),并给出了各种关系映射的示例,如单向多对一、双向一对一、双向一对多和多对多映射的配置。同时提到了JPA自动建表策略的配置选项,以及持久化顺序的重要性。
摘要由CSDN通过智能技术生成

JPA中的映射关系

jpa中维护one to one ,one to many, many to one ,many to many 四种映射关系。

      在每个关系中,双方中的一方在其表中拥有连接列。那么一方称为所有方(owning side) 或者关系的所有者。

不具有连接列的一方称之为非所有方(non-owning)或者反方

      所有权对于映射很重要,因为用于定义映射到数据库序列的物理注解(例如,@JoinColumn总是在关系的所有方定义)。如果它们不存在,那么值的默认值将从所有方的特性的角度来考虑。

     多对一映射总是在关系的所有方之上,所以如果在拥有多对一方的关系中发现一个@JoinColumn,那么这将是所有方的位置。

注解@JoinColumn,需要指定连接列的名称,可以使用name元素。

举个例子来说: 学生和课程的关系定为一对多,

外键维护在多的一方,此时课程表映射的实体就是owning-side,学生表就是inverse-side

课程表

学生表

关系映射的使用到的注解说明

@JoinColumn

标记一个列指定实体的关联关系的。可以和@OneToMany或者@ManyToOne搭配使用

@OneToMany

在一的一方定义一对多的关联关系,并且如果关联关系时双向的,mappedBy属性必须用来标注,在拥有关联关系的实体一方中表示关系的字段名,也就是使用mappedBy属性是不维护关联关系的一方,值是拥有关联关系一方中标识关系的字段名

使用了mappedBy属性后,不能在使用@JoinColumn注解,会抛异常

 

@ManyToOne 没有mappedBy属性.

@OneToOne /@ManyToMany

都是在实体的字段上表示对应的关联关系,在表示双向关联关系时候,都必须使用mappedBy属性

 

单向多对一映射

 

 成员和班级是多对一映射,并且外键列定义在成员表中,那么创建成员实体的时候,需要使用@JoinColumn标注

成员是关系的拥有者。也就是关系为多的一方持有

@JoinColumn的值是数据库中的外键名称,@JoinColumn和@ManyToOne搭配维护了关联关系,此时是单向的关联

Partner实体类

@Entity
@Table(name="partner_info")
public class Partner {
	private Integer partner_id;
	private String partner_name;
	private Grade grade;
	@Id
	@Column(name="partner_id")
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	public Integer getPartner_id() {
		return partner_id;
	}
	public void setPartner_id(Integer partner_id) {
		this.partner_id = partner_id;
	}
	@Column(name="partner_name")
	public String getPartner_name() {
		return partner_name;
	}
	public void setPartner_name(String partner_name) {
		this.partner_name = partner_name;
	}
	@JoinColumn(name="team_id")
	@ManyToOne
	public Grade getGrade() {
		return grade;
	}
	public void setGrade(Grade 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值