Jpa02

1. JPA的主键生成策略(了解)

1.1主键

	定义:被挑选出来,作表的行的唯一标识的候选关键字
	特点:非空且唯一
	分类:
			代理主键 :没有实际意义的一些列作为主键
			自然主键 :具体实际意义的列作为的主键

1.2 JPA主键生成策略

	@Id
	@GeneratedValue
	private Long id;
	GeneratedValue:默认使用 等效于(strategy = GenerationType.AUTO)自己会根据你的配置的方言 来选择使用的生成策略 -- 主键自增mysql --序列(常用)
	注意:如果使用@GeneratedValue ,保存数据时不设置id的值,因为id这个主键值已经交给jpa进行维护

2 JPA的实体状态

2.1JPA几大状态

(1)瞬时状态:刚刚new 创建出来,没有和entityManager发生关系
(2)托管状态(持久状态):已经和entityManager发生关系
(3)脱管状态(游离状态):已经和entityManager脱离关系
(4)删除状态:如果我们要删除一个内容 remove 这个对象的状态就是删除状态

2.2脏数据更新 --允许存在

一个持久化状态的数据,如果修改非主键的值,在commit的时候,会自动发送update语句更新

2.3 n-to-n问题

持久化状态的主键的值被修改产生的问题

2.4实体定义规则

(1)实体类不能定义成final类型 --最终 不能被继承
(2)实体里面的字段 全部包装类型  底层很多代码都是判断 是否为null
(3)如果实体里面有有参数的构造方法,一定要提供一个无参数构造方法 

3 实体之间关系

3.1有哪些关系

(1)依赖关系
		依赖注入DI:把对象注入到类里面这个过程 就叫依赖注入  (IOC控制反转)
(2)关联关系
		按照内容或者性质来分:多对一,一对多
		按照导航性分:单向,双向
(3)组合关系
		多对一 或者一对多 整体和部分之间,整体和部分不能分割
(4)聚合关系
		多对一 或者一对多 整体和部分之间,整体和部分可以分开存在
(5)泛化关系
		体现继承

3.2 查询-抓取策略

抓取策略 fetch:告诉jpa使用什么方式获取数据
配置: @ManyToOne(fetch = FetchType.EAGER/LAZY)
		 EAGER:急jiazai你不管你使用不使用 都把数据查询出来
  		 LAZY:懒加载 需要用的 才去加载数据  (性能要好一点)
  		 		注意:实体类不要定义成final类型

4 二级缓存

缓存:把数据下载到本地
程序里面:先从数据库把数据查询出来,放入缓存里面(内存Map),下来查询数据的时候,先从缓存里找,如果有,直接取出,如果没有,在发送sql查询数据,放入缓存
目的:提高查询效率

一级缓存命中条件:同一个EntityManagerFactory  同一个EntityManager 同一个OID

二级缓存命中条件:同一个EntityManagerFactory 不同EntityManager 同一个OID

查询缓存命中条件:同一个EntityManagerFactory  不同的EntityManager  发出jpql语句相同,条件值相同; 用的很少,条件值相同情况下 很少,命中很低

二级缓存使用
	(1)导包
	(2)配置 --底层ehcache这个框架完成
		在perisistenc.xml配置
			<!-- 开启二级缓存-->
			<property name="hibernate.cache.use_second_level_cache" value="true" />
			<!--二级缓存实现类-->
			<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory" />
			<!--查询缓存-->
			 <property name="hibernate.cache.use_query_cache" value="true" />
		扫描策略
			<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>

5 缓存理论

5.1 什么时候使用二级缓存

(1)读取大于修改(查询居多 修改很少);如果经常修改数据,缓存里面数据也需要修改 ,也要同步
(2) 你要对数据 有独享控制,不能被第三方程序改变,不然数据就会出现脏数据
(3)这个数据必须能够容忍一些错误,太精确的数据不适合放入缓存(金额)日志信息
(4)缓存数据量不要超过内存容器,超过不能存下来,但是有NB框架,实现==钝化==的效果内存数据量满了之后,会存入磁盘 -- ehcahe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值