Hibernate实体类的瞬时、持久、托管状态的转换与详解、一级缓存(session缓存)与快照、其它API的save与persist细节详解-day02下

本文深入解析Hibernate实体的瞬时、持久、托管状态转换,详细介绍了如何从瞬时状态变为持久状态。此外,文章还探讨了一级缓存的概念、作用、移除缓存的方法,以及快照的刷新机制。最后,重点讲解了save和persist方法的细节和应用场景,包括它们在事务内外的行为差异。
摘要由CSDN通过智能技术生成

第一节 Hibernate 实体类的三种状态

1.1 状态介绍

  • 实体Entity有三种状态:瞬时状态、持久状态、托管状态
  • 瞬时状态:transient, session没有缓存,数据库也没有记录,oid没有值
  • 持久状态:persistent, session有缓存, 数据库也有记录,oid有值
  • 脱管状态/游离状态:detached,session没有缓存,数据库有记录,oid有值

1.2 瞬时 转 持久

  • 新创建的一个对象,经过save,或者savaOrUpdate调用后,会变成持久状态
package com.it.hibernate.test;

import com.it.hibernate.domain.User;
import com.it.hibernate.uitls.HibernateUtils;
import org.hibernate.Session;
import org.junit.Test;

public class Demo3 {
   
	/*
		瞬时 -> 持久
	*/
	@Test
	public void test3(){
   
		Session session = HibernateUtils.openSession();
		session.getTransaction().begin();
		//新创建一个对象就是瞬时状态
		//此时:该对象没有id,数据库里没有记录,session没有缓存
		User user = new User("shu","123");
		session.save(user);//通过save或saveOrUpdate保存就会变成持久状态
		//saveOrUpdate方法会判断user里有没有id,有id,更新数据,没有id,插入数据

		//经过保存后,这个对象就是持久状态,
		//这时:id有值,数据库也有值,session有缓存
		session.getTransaction().commit();
		session.close();
	}

}

在这里插入图片描述

  • session有缓存的理解:
	@Test
	public void test4(){
   
		Session session = HibernateUtils.openSession();
		session.getTransaction().begin();
		User user = new User("shu02","123");
		session.save(user);//持久化保存
		System.out.println(user);
		//由于上面save保存过了,session中有缓存,有id和对象,
		//查阅数据库可以知道下一个数据的id为2
		//本来使用get方法会想执行select查询一下,现在没有执行select,
		//是因为session缓存中有数据,就不用查询数据库了,直接从session中取数据
		User user1 = (User) session.get(User.class,2);
		System.out.println(user1);
		session.getTransaction().commit();
		session.close();
	}

在这里插入图片描述

1.3 持久 转 托管

  • load、get返回的对象是持久状态的,当session关闭或者清除后,对象变成托管状态
	@Test
	public void test5(){
   
		Session session = HibernateUtils.openSession();
		session.getTransaction().begin();
		//通过get方法可以获取一个持久状态的对象
		User user1 = (User) session.get(User.class,2);
		System.out.println(user1);
		User user2 = (User) session.get(User
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值