Spring Data Jpa系列教程(二)--------实体详解
2018-03-09 11:17
1001 查看
Spring Data Jpa是基于HIbernate开发的,所以建立实体建的实体和映射关系需要好好好的去了解一下:
托管状态(B):托管状态,实体属于这个状态就说明实体已经被entityManager管理了
删除状态(C):略
游离状态(D):游离状态和A的区别就是D的ID是有值的
B状态是托管状态,处于B状态的对象,对他们的操作会随着事物自动提交到数据库,提交事务后,B的对象就变成了D状态,D与A的区别是D中的对象的ID是有值的。当entityManager实体管理器执行persist,rollback,refresh,merge方法是,当前对象会变成B状态。
------实体基础映射
@Entity表示这个类是一个实体类
@Table指定这个实体对应数据库的表名@column(name="name",length=60,nullable=false, unique=false,insertable=false,
columnDefinition = 对应数据库字段类型)
private String name;
@column(name="big",precision = 12, scale = 2)
private BigDecimal big;
insertable,updateable表示是否允许插入或更新,precision表示精度,当属性为double或者bigdecimal时,他表示数字的总长度,scale表示小数的位数。
主键:@ID@GenerateValue 主键策略 ----------AUTO 和默认的一样 ----------IDENTITY 自动增长
----------SEQUENCE 序列,oracle使用
[b]------实体高级映射[/b]
1,一对一
Persion | Address address_id |
在persion实体中:@oneToOne
@JoinColumn(name = "address_id", refreceColumnName = "aid")
private Address address;name表示本表关联字段,refreceColumnName表示另一端关联字段名称
2,一对多(和onetoone没啥区别,一对多会生成一张中间表)
3,多对一(和onetoone没啥区别,也是那两个属性)
4,多对多
Student | 中间表student_teacher | Teacher
在Teacher实体中:@ManyToMany
@JoinTable(name = "teacher_student",JoinColumns = @JoinColumn(name = "teacher_id",refreceColumnName = "tid"),inverseJoinColumns = @JoinColumn(name = "student_id",refreceColumnName="sid"))
private List<Student> students;@JoinTable表示关联到中间表
name是中间表名字
JoinColumns表示配置关系拥有者与中间表的关联
inverseJoinColumns表示配置关系被拥有者与中间表的关联
(拥有者和被拥有者的意思是比如一对多关系中,生成一张中间表,部门Depart和员工Employee,在部门实体中配置@OneToMany,则关系拥有者是Depart,关系被拥有者是Employee)
级联:
例如@OneToOne(cascade = {CascadeType.ALL},fetch = FetchType.LAZY)cascade是级联操作,比如增删改,fetch是专门管理级联查询
CascadeType有如下类型:
-----REMOVE 删除当前对象,关联对象也会一起删除
-----ALL 所有操作都会关联删除
-----DETACH
-----MERGE
-----PERSIST
-----REFRESH
FetchType有两类型
-----LAZY 懒加载
-----EAGER 急加载
就到这里吧,下一张讲JPQL,博客写的不好,有什么问题直接家QQ问我,或者留言都行。。下课!!!!
------实体管理器
实体管理器EntityManager是实体与数据库的桥梁(和事务一起发挥作用),相当于Hibenrtae中的session,Mybatis中的sqlSession。 实体总共有4个状态: (persist用于插入,merge用于修改或插入,remove用于删除) 新建状态(A):新建实体的时候,实体就是属于这个状态,执行persist方法后进入托管状态托管状态(B):托管状态,实体属于这个状态就说明实体已经被entityManager管理了
删除状态(C):略
游离状态(D):游离状态和A的区别就是D的ID是有值的
B状态是托管状态,处于B状态的对象,对他们的操作会随着事物自动提交到数据库,提交事务后,B的对象就变成了D状态,D与A的区别是D中的对象的ID是有值的。当entityManager实体管理器执行persist,rollback,refresh,merge方法是,当前对象会变成B状态。
------实体基础映射
@Entity表示这个类是一个实体类
@Table指定这个实体对应数据库的表名@column(name="name",length=60,nullable=false, unique=false,insertable=false,
columnDefinition = 对应数据库字段类型)
private String name;
@column(name="big",precision = 12, scale = 2)
private BigDecimal big;
insertable,updateable表示是否允许插入或更新,precision表示精度,当属性为double或者bigdecimal时,他表示数字的总长度,scale表示小数的位数。
主键:@ID@GenerateValue 主键策略 ----------AUTO 和默认的一样 ----------IDENTITY 自动增长
----------SEQUENCE 序列,oracle使用
[b]------实体高级映射[/b]
1,一对一
Persion | Address address_id |
在persion实体中:@oneToOne
@JoinColumn(name = "address_id", refreceColumnName = "aid")
private Address address;name表示本表关联字段,refreceColumnName表示另一端关联字段名称
2,一对多(和onetoone没啥区别,一对多会生成一张中间表)
3,多对一(和onetoone没啥区别,也是那两个属性)
4,多对多
Student | 中间表student_teacher | Teacher
在Teacher实体中:@ManyToMany
@JoinTable(name = "teacher_student",JoinColumns = @JoinColumn(name = "teacher_id",refreceColumnName = "tid"),inverseJoinColumns = @JoinColumn(name = "student_id",refreceColumnName="sid"))
private List<Student> students;@JoinTable表示关联到中间表
name是中间表名字
JoinColumns表示配置关系拥有者与中间表的关联
inverseJoinColumns表示配置关系被拥有者与中间表的关联
(拥有者和被拥有者的意思是比如一对多关系中,生成一张中间表,部门Depart和员工Employee,在部门实体中配置@OneToMany,则关系拥有者是Depart,关系被拥有者是Employee)
级联:
例如@OneToOne(cascade = {CascadeType.ALL},fetch = FetchType.LAZY)cascade是级联操作,比如增删改,fetch是专门管理级联查询
CascadeType有如下类型:
-----REMOVE 删除当前对象,关联对象也会一起删除
-----ALL 所有操作都会关联删除
-----DETACH
-----MERGE
-----PERSIST
-----REFRESH
FetchType有两类型
-----LAZY 懒加载
-----EAGER 急加载
就到这里吧,下一张讲JPQL,博客写的不好,有什么问题直接家QQ问我,或者留言都行。。下课!!!!
相关文章推荐
- Spring Boot系列教程四:配置文件详解properties
- Spring Boot系列教程四:配置文件详解properties
- Spring Data Jpa系列教程(四)--------高级查询
- Spring Data Jpa系列教程(一)--------入门
- 详解Spring Data JPA系列之投影(Projection)的用法
- Spring Data Jpa系列教程(三)--------JPQL
- Android系列教程adb操作命令详解
- CSS3 经典教程系列:CSS3 圆角(border-radius)详解
- Springboot系列:Springboot与Thymeleaf模板引擎整合基础教程(附源码)
- Springboot系列:Springboot与Thymeleaf模板引擎整合基础教程(附源码)
- Spring系列之六:AOP的代理详解
- 设计模式详细系列教程 (三)以网上购物通用的订单流程 详解状态模式
- Exchange Server 2010系列教程之十二 exchange 2010 POP3配置详解
- 狗鱼IT教程:推介最强最全的Spring系列教程
- springboot配置内存数据库H2教程详解
- Flex4系列教程之六 – 整合Flex,BlazeDS,Spring(< 2.5.6)
- Android Studio系列教程五--Gradle命令详解与导入第三方包
- Android Studio系列教程五--Gradle命令详解与导入第三方包
- 解读ASP.NET 5 & MVC6系列教程(6):Middleware详解
- Android Studio系列教程--Gradle命令详解与导入第三方包