1.JPA主键生成策略(掌握)
主键:唯一地标识表中的某一条记录
主键特点:非空且唯一
主键分类: 自然主键 :具有实际意义的列来作为主键
代理主键 :没有实际意义的列来作为主键 --单体项目
什么主键的生成策略:
jpa采取的方案方式去生成主键
jpa:
(1)auto策略 – 默认使用这种:根据数据库方言来选择的到底使用哪种策略
比如 配置mysql的方言 --策略 自增策略 (都喜欢mysql)
配置oracle的方言 – 策略 序列sequence策略 --很多不用 收费 有钱的公司(金融 保险 政府)
create sequece s_employee;
insert into table(id,name,…) values(s_employee.nextVal())
(2)table策略: 表的生成策略 额外创建一张表来维护主键
SEQUENCE_COUNT | SEQUENCE_NAME |
---|---|
2 | t_employee |
(3) sequence策略: 序列策略
(4) identity策略:mysql采用这种 自增策略
主键已经交给jpa来维护,我们就不需要设置了
2.JPA的状态(掌握)
2.1 什么叫JPA的状态
一个实体交给jpa维护的时候,这个实体在不同的时期,状态不一样
(a)临时(瞬时)transient New:刚刚创建出来。没有和jpa进行发生关系
(b)==持久(托管)==Managed:这个实体对象已经和jpa发生关系
(c)游离(脱管)Detached:脱离entityManager的管理,已经被持久化,不存在的entityManager里面
(d)删除Remove:即将要删除的时候,remove
2.2 脏数据更新 (掌握)
一个持久化状态数据,修改非主键的值,会在commit提交的时候,自动会发送update sql语句去更新
@Test
public void testDirtyData() throws Exception{
//获取entityManager实体管理器
EntityManager entityManager = JPAUtils.getEntityManager();
//获取事务,开启事务transaction
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
//查询一条记录
StatusJPA statusJPA = entityManager.find(StatusJPA.class, 1L);
//设置数据的name
statusJPA.setName("雾都");
//提交事务