JPA进阶
主键生成策略
主键:数据的唯一标识,必须是非空唯一的
JPA主键生成的标准策略有4种:
auto:默认,根据方言自动选择生成策略
identity:mysql的主键自增长策略
sequence:主键的创建效率最高,Oracle的序列对象
table:其他的数据库使用,创建一个表,专门用来存储主键
一般使用默认的生成策略就行了
JPA持久对象的状态
临时状态
在刚用new语句创建,没有和entityManager发生关系
持久化状态(托管状态)
事务开始,和JPA发生关系了,被加入到了一级缓存当中
游离状态(脱管状态)
事务提交之后,但是已经和JPA脱离关系了
删除状态:从JPA开始才有
调用了remove()方法,删除对象后,变味了删除状态
脏数据更新
一个持久状态对象在事务管理内,如果改变原来的数据(非主键),此时出现脏数据,在事务提交的时候自动发出update语句去修改
Demo
1 | package com.ifueen.sm; |
域对象之间关系
域对象之间的关系分为一对一,一对多(多对一),多对多,现主要讲一下多对一的关系
单向多对一关系
说直白点,就是多个学生类可以对应一个老师类
从表Student类
1 | package com.ifueen.sm; |
主表Tearch类设计
1 | package com.ifueen.sm; |
测试
1 | package com.ifueen.sm; |
fetch抓取策略
FetchType.EAGER:fetch的默认值,立即加载
默认情况下,JPA持续性提供程序使用获取类型EAGER:这将要求持续性提供程序运行时必须迫切左外连接获取数据。
FetchType.LAZY:延迟加载
FetchType.LAZY:这将提示持续性提供程序在首次访问数据时并不急于获取数据。