1. JPA的主键生成策略
1.1 什么是主键
唯一标识 每一行的数据 比如 id =1
主键特点:非空且唯一
主键分类:
代理主键 :没有实际意义的一些列作为主键 比如id 现在就用的代理主键
自然主键 :具体实际意义的列作为的主键 比如 身份证号
1.2 JPA主键生成策略
配置
@Id
@GeneratedValue
private Long id;
GeneratedValue:默认使用 等效于(strategy = GenerationType.AUTO)
自己会根据你的配置的方言 来选择使用的生成策略 – 主键自增mysql --序列(oracle)
--常用方式
@GeneratedValue(strategy = GenerationType.IDENTITY) -- 就是主键自增策略
@GeneratedValue(strategy = GenerationType.SEQUENCE) --序列 mysql不支持 但是oracle支持(不用)
@GeneratedValue(strategy = GenerationType.TABLE) --表的策略 兼容好 可以mysql 支持oracle 性能有点低
@GeneratedValue(strategy = GenerationType.AUTO) -- 默认根据方言来选择
hibernate底层还很多生成策略
搜索内容:两次shift
JPA提供四种生成策略,我们常用是auto
注意事项:如果使用@GeneratedValue ,在保存数据 就不要设置id的值,应该id这个主键值已经交给jpa进行维护
2 JPA的实体状态
JPA有哪些状态?
刚才使用JPA的实体,它其实是有状态的
(1)瞬时状态
刚刚new 创建出来,没有和entityManager发生关系
(2)托管状态(持久状态)
已经和entityManager发生关系
(3)脱管状态(游离状态)
已经和entityManager脱离关系
(4)删除状态
如果我们要删除一个内容 remove 这个对象的状态就是删除状态
2.1脏数据更新 --允许存在
一个持久化状态的数据,如果修改非主键的值,在comm