JPA&缓存

JPA持久对象的状态

1为什么要学习持久对象的状态

JPA持久对象的状态对我们来说非常非常重要,

主要是我们用的时候,遇到异常、问题的时候,都需要通过状态来分析,才知道这到底是为什么?是什么原因出现这种情况?怎样才可以正确使用JPA

临时状态(transient):瞬时状态

刚刚用new语句创建,没有和entityManager发生关系
没有被持久化,不处于entityManager中。该对象成为临时对象

持久化状态(persistent):托管状态

和entityManager发生关系
已经被持久化,加入到entityManager的一级缓存中(填充一级缓存)。
该状态的对象为持久化对象。





@Test

public
void save() throws Exception {
  	StateDomain stateDomain = new
		StateDomain();// 临时状态
 			 stateDomain.setName("itsource");// 临时状态
 			 EntityManager entityManager =
				JPAUtils.getEntityManager();
 			 entityManager.getTransaction().begin();
  		entityManager.persist(stateDomain);// 持久状态
  	entityManager.getTransaction().commit();
  entityManager.close();// 游离状态
}

游离状态(detached):脱管状态

已经被持久化,但不处于entityManager中。
该状态的对象为游离对象。

删除状态(removed):从JPA才开始有的状态

只有调用了entityManager.remove(domain对象)方法
对象有关联的ID,并且在entityManager管理下,
但是已经被计划删除,事务提交就真的被删除了。

脏数据更新
一个持久状态对象在事务管理内,如果改变原来的数据(非主键),此时出现脏数据,在事务提交的时候自动发出update语句去修改

@Test
public void update() throws Exception {
  				  save();
  EntityManager entityManager =JPAUtils.getEntityManager();
  entityManager.getTransaction().begin();
  S
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值