前言:都在说Jpa是一种规范,而Hibernate是它的一种实现。刚开始接触jpa,hibernate的注解了解的并不多一直以为是两个不同的框架,以为是两套不同的注解,其实并不是。一些重要的注解如Column, OneToMany等,hibernate没有提供,是调用jpa中package javax.persistence;包下的接口,这说明jpa的注解已经是hibernate的核心,hibernate只提供了一些补充,而不是两套注解,所以我们要使用hibernate注解就必定要使用jpa。
先来看几个实例
1、@OneToOne(mappedBy = "applyOrder", fetch = FetchType.LAZY,cascade = CascadeType.REMOVE)
public ReturnsRecord getReturnsRecord() {
return returnsRecord;
}
2、@OneToOne(mappedBy = "orderxx", fetch = FetchType.LAZY)
@JoinColumn(nullable = true, updatable = true)
public WxOrder getWxOrder() {
return wxOrder;
}
3、@NotEmpty
@OneToMany(mappedBy = "order", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
public List<OrderItem> getOrderItems() {
return orderItems;
}
4、@ManyToOne(fetch = FetchType.LAZY)
public Cashier getCashier() {
return cashier;
}
常用关系:
1、OneToOne:一对一关联(即一对一关系)
2、OneToMany:一对多关联(即一对多关系)
3、ManyToOne:多对一关联(即多对一关系)
4、ManyToMany:多对多关联(即多对多关系)
mappedBy:
1、只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性。
2、mappedBy标签一定是定义在被拥有方的,他指向拥有方(如例2中mappedBy="applyOrder",也就是在当前类中指向ReturnsRecord类中的applyOrder属性)
3、mappedBy的含义,应该理解为,拥有方能够自动维护跟被拥有方的关系,当然,如果从被拥有方,通过手工强行来维护拥有方的关系也是可以做到的。
4、mappedBy跟joinColumn/JoinTable总是处于互斥的一方,可以理解为正是由于拥有方的关联被拥有方的字段存在,拥有方才拥有了被拥有方。mappedBy这方定义JoinColumn/JoinTable总是失效的,不会建立对应的字段或者表。
其他属性:
1、fetch的默认值:FetchType.EAGER 这将要求持续性提供程序运行时必须迫切获取数据。FetchType.LAZY相反,懒加载
2、cascade:级联,它可以有有五个值可选,分别是:
CascadeType.PERSIST:级联新建
CascadeType.REMOVE : 级联删除
CascadeType.REFRESH:级联刷新
CascadeType.MERGE : 级联更新
CascadeType.ALL : 以上全部四项
3、@JoinColumn:主表外键字段
4、@NotEmpty 不能为空
--------------------------------------------------------分割线-----------------------------------------------------
毒鸡汤:只有不断学习的人、始终保持高成长率,才有可能不依靠运气、出身那些偶然条件,通往财富自由。