1-m:多的一方为关系维护端,关系维护端负责外键纪录的更新,关系被维护端没有权力更新外键纪录.
拥有mappedBy注解的实体类为关系被维护端,另外的实体类为关系维护端的。顾名思意,关系的维护端对关系(在多对多为中间关联表)的CRUD做操作。关系的被维护端没有该操作,不能维护关系。
@ManyToOne表示一个多对一的映射,该注解标注的属性通常是数据库表的外键
optional:是否允许该字段为null,该属性应该根据数据库表的外键约束来确定,默认为true
fetch:表示抓取策略,默认为FetchType.EAGER(一的一端默认为立即加载,多的一端默认为懒加载)
cascade:表示默认的级联操作策略,可以指定为ALL,PERSIST,MERGE,REFRESH和REMOVE中的若干组合,默认为无级联操作
targetEntity:表示该属性关联的实体类型.该属性通常不必指定,ORM框架根据属性类型自动判断targetEntity.
@JoinColumn
@JoinColumn 和 @Column类似,指明此属性描述的不是一个简单字段,而是一个关联字段
name:该字段的名称(指定关联关系中的维护端对应的表中和被维护端的主键进行关联的字段的名称)
referencedColumnName:属性指定关联关系中的被维护端与关联关系中的维护端对应的表之间形成关联关系的字段名称,通常用于关联关系中的被维护端的关联字段不是自己的主键的情况
@OneToMany(fetch=FetchType,cascade=CascadeType)
@OneToMany描述一个一对多的关联,该属性应该为集体类型,在数据库中并没有实际字段.
维护端注解
@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.REFRESH }, optional = false)
@JoinColumn(name = "order_id")
被维护端注解
@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.REFRESH,
@Entity
@Table(name = "order_info")
public class OrderInfo {
}
@Entity
@Table(name = "order_item")
public class OrderItem {
}
JPA多对多双向
维护端注解
@ManyToMany (cascade = CascadeType.REFRESH)
@JoinTable (//关联表