JPA进阶二级缓存
1.主键的分类
1.自然主键:没有实际意义的主键
2.代理主键
主键的特征:非空且唯一的
@GeneratedValue 默认为auto
主键的生成策略:jap标准的策略有四种 auto table sequence identity
auto:自动选择一个最适合底层数据库的主键生成策略支持MySQL此种主键生成策略比较常用
table:表的生成策略 额外创建一张表来维护主键
sequence:通过数据库的序列产生主键, MYSQL 不支持
identity:主键由数据库生成, 采用数据库自增长, Oracle不支持这种方式
2.JPA的状态:
1.一个实体几个JPA维护的时候 这个实体在不同的时期状态不一样
2. 1临时(瞬间)刚刚创建出来没有和JPA发生关系
2.持久(托管)已经和JPA发生关系
3.(游离)脱离entityManager的管理已经被持久化 不存在entityManager里面
4.删除 remove状态
3.脏数据更新
1.脏数据的更新定义:一个持久化状态的数据,如果修改非主键的之后,在conmit的时候,自动去发送update语句更新
2.一个持久化的数据如果改变了一个主键的值会报n-n的错误 持久化的数据不能更改主键的值
列代码:
4.实体类的定义规则
1.不要使用final修饰
2.要使用基本数据类型对应包装类
5.域对象之间关系
1.依赖关系(一个类去依赖另外一个类)
2.关联关系(一个类和另外一个类他们之间是有关系的)
3.组合关系(整体和部分的关系不可以分开存在)
4.聚合关系(整体和部分的关系可以分开存在)
6.JPA单向多对一
外键生成:@ManyToOne配置外键
@ManyToOne(Fetch = FechType.LAZY)懒加载
@ManyToOne(Fetch = FechType.EAGER)迫切加载
懒加载: 在查询数据的时候如果使用的是懒加载那么他只会根据你的需求查出你要的数据
迫切加载: 在查询数据的时候如果为迫切加载那么他江湖把跟他有所关系的外键表都查询出来
7.缓存
domain类的二级缓存的配置:@Cacheable(true)配置在实体类上面
peisistence.xml配置:
pom.xml配置:导包
缓存的作用:利用空间换取时间
一级缓存的命中条件:同一个Entitymanage 同一个entityManager同一个人OID
二级缓存的命中条件:同一个Entitymanage 不同的entityManager同一个人OID
domain类的二级缓存:同一个EntityManagerFactory,不同一个EntityManager,OID相同
OID:Object id
如果是用entityManager1.createQuery(sql).setParameter(1, 1);语句来查询想要存进缓存里面需要在查询语句下输入 query1.setHint(QueryHints.HINT_CACHEABLE,true);