JPA Day2

1.JPA的主键生成策略

@GeneratedValue(strategy = GenerationType.AUTO) -- 默认根据方言来选择(默认)
@GeneratedValue(strategy = GenerationType.IDENTITY) -- ID自增长策略。只能用于支持ID自增长的数据库
@GeneratedValue(strategy = GenerationType.SEQUENCE) --用于有序列的数据库,如Oracle
@GeneratedValue(strategy = GenerationType.TABLE) --兼容性好支持mysql也支持oracle,但是每创建一个表就会生成另一个序列表,性能低

设置了@GeneratedValue主键自增就不要再手动设置主键的值,因为该主键值已经交给jpa进行维护

2.JPA的实体状态

(1)瞬时状态
​	刚刚new 创建出来,没有和entityManager发生关系

(2)托管状态(持久化状态的数据)
​	已经和entityManager发生关系  ex:数据被查询出来还没成为脱管或删除状态时就处于持久化状态	

(3)脱管状态(游离状态)
​	已经和entityManager脱离关系

(4)删除状态
	如果我们要删除一个内容 remove 这个对象的状态就是删除状态

3.脏数据更新

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

4.N-To-N问题

一个持久化状态的数据,主键的值被修改

5.实体定义规则

1.实体类不能定义成final类型
2.实体里面的字段,全部声明为包装类型
3.如果实体里面有有参数的构造方法,一定要提供一个无参数构造方法

6.实体之间关系

1.依赖关系
	依赖注入:把对象注入到类里面这个过程,就叫依赖注入
	
2.关联关系
	2.1按照内容或者性质来分:
		多对一:多个员工属于一个部门
		一对多:一个部门下有多个员工
		多对多:一个角色(演员 学生 老师) 对应多个权限
		一对一:一个人对应一张身份证
	2.2按照导航性分:
		单向:只能从一方获取另外一个方
		双向:可以互相获取
		
3.组合关系
	多对一,或者一对多,整体和部分之间不能被分割(人和身体器官)

4.聚合关系
	多对一,或者一对多,整体和部分之间可以被分割(电脑主机和鼠标 键盘 等)

5.泛化关系(体现继承)

7.查询-抓取策略(就是告诉jpa使用什么方式去获取的数据)

多对一抓取策略(推荐使用延迟加载 ,性能要高一点)
	@ManyToOne(fetch = FetchType.EAGER)
	@ManyToOne(fetch = FetchType.LAZY)
	EAGER:急切、迫切 			你不管你使用不使用 都把数据查询出来
    LAZY:懒加载、延迟   		你需要用的才去加载数据  性能要好一点

8.二级缓存

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

二级缓存使用
	导包:
	<dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-ehcache</artifactId>
        <version>4.3.8.Final</version>
    </dependency>
    
	 配置开启二级缓存:
	 <!-- 开启二级缓存-->
     <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" />

	JPA设置Entity缓存的方法:
	<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
	ENABLE_SELECTIVE,默认值,除非被@Cacheable显式声明要缓存,否则默认不缓存
	DISABLE_SELECTIVE,除非被@Cacheable显式声明不缓存,否则默认缓存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值