mysql jpa缓存_JPA进阶二级缓存

JPA进阶二级缓存

1.主键的分类

1.自然主键:没有实际意义的主键

2.代理主键

主键的特征:非空且唯一的

@GeneratedValue 默认为auto

主键的生成策略:jap标准的策略有四种  auto   table   sequence    identity

6c219d54c084aac2ecfab98a3d3b75a1.png

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的错误   持久化的数据不能更改主键的值

列代码:

ea41e3b6e3a339dff353d78b2019df6d.png

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配置:

ff0404949b8cac0152245a947d8e78e2.png

pom.xml配置:导包

365f4549195f31a9eec98d4066aa1e94.png

缓存的作用:利用空间换取时间

一级缓存的命中条件:同一个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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值