Hibernate 中的session 的flush、reflush 和clear 方法 ,及数据库的隔离级别


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. flush 方法:


说白一点:如果session 中的某个类的属性发生了改变,使用flush() 方式,去更改数据库中的记录,使其和改变后的session 中的对象一致。 

打个不恰当的比方:session 这时是主动方,数据表是被动方,被动方应根据主动放的改变而改变,一保存和主动方一致。flush()就是让数据库的记录跟着session 中对象的改变而改变

<span style="font-size:14px;">/**
	 * flush :使用数据表中的记录和Session 缓存 中的 对象的状态保存一致,为了保持一致,则可能会发送对应的SQL 语句。
	 * 			是为了保证缓存的记录 和数据表中的记录一致,向数据库方式SQL 语句,去改变数据库中的记录使其和session 中的
	 * 			的一致.
	 * 
	 * 1. 在transaction 的commit() 方法中: 先调用session 的flush方法,在提交事务
	 * 2. flush() 方法 可能会发送SQL 语句,但不会提交事务;
	 * 
	 * 3. 注意: 在未提交事务或显示的调用session.flush() 方法之前,也有可能会进行flush() 操作
	 *	  ①.因为执行HQL 和QBC 时,需要保证获取的记录是最新的,因此 执行HQL 或QBC 查询,会先进行flush()操作, 以得到数据表中的最新的记录
	 * 	  ②. 若记录的ID 是由底层数据库使用自增的方式生成的,则在调用save() 方法后, 就会立即方式INSERT 语句
	 * 			因为save 方法后,必须保证对象中的ID 是 存在的!
	 * 			 但是当生成ID 的方式,换成hibernate 生成的化,就不会在transaction.commit之前在执行sql语句了
	 * 		这就是ID 生成方式对 放送sql 语句的影响!
	 */
	@Test
	public void testSessionFlush2(){
		
		Person person = new Person("Zhagng", "sleeping", new Date());
		session.save(person);
		
	}
	@Test
	public void testSessionFlush(){
		
		Person person = (Person) session.get(Person.class,32768);
		person.setName("Jim");
		
		Person person2 = (Person) session.createCriteria(Person.class).uniqueResult();
		System.out.println(person2);
		
	}</span>
2. reflush 方法:

打个不恰当的比方数据表是主动方,session 这时是被动方,被动方应根据主动放的改变而改变,一保存和主动方一致。reflush()就是让session 中对象跟着数据库的记录的改变而改变

	/**
	 * refresh() :会强制发送SELECT 语句,以使Session 缓存中对象的状态和数据表中对应的记录保持一致!
	 * 
	 */
	
	@Test
	public void testRefresh(){
		Person person = (Person) session.get(Person.class, 1);
		System.out.println(person);
		
		session.refresh(person);
		System.out.println(person);
		
	}
3. clear()清理缓存

/**
	 * clear():清理缓存
	 */
	@Test
	public void testClear(){
		Person person = (Person) session.get(Person.class, 1);
		session.clear();
		Person person2 = (Person) session.get(Person.class, 1);
		
	}














  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Hibernate Session 是一个非常重要的对象,它用于管理 Hibernate 对象的生命周期,提供了对 Hibernate 操作的一系列方法Session 对象代表了应用程序和数据库之间的一次会话,可以用于执行各种 CRUD 操作、查询、缓存管理等功能。 具体来说,Session 对象在 Hibernate 的作用如下: 1. 管理对象生命周期:Session 对象用于管理 Hibernate 对象的生命周期,包括对象的创建、持久化、加载、更新、删除等操作。通过 Session 对象,可以将 Java 对象映射到数据库的记录,并通过 Session 对象来维护这些对象和记录之间的关系。 2. 提供事务支持:Session 对象提供了事务支持,可以通过 beginTransaction() 方法启动一个事务,通过 commit() 或 rollback() 方法来提交或回滚事务。Session 对象的所有操作都在一个事务执行,保证了数据的一致性和完整性。 3. 执行 CRUD 操作:Session 对象提供了各种 CRUD 操作方法,包括 save()、update()、delete() 等方法,可以用于对数据库进行插入、更新和删除操作。 4. 执行查询操作:Session 对象提供了各种查询方法,包括 get()、load()、createQuery()、createCriteria() 等方法,可以用于查询数据库的数据。 5. 管理缓存:Session 对象还提供了一系列方法来管理 Hibernate 的缓存,包括 evict()、clear()、flush() 等方法,可以用于清除缓存、强制刷新等操作。 6. 处理懒加载:Hibernate 的懒加载是指只有在需要访问对象的某些属性时才会从数据库加载这些属性的值,Session 对象可以用于处理懒加载,保证在需要访问属性时才会从数据库加载数据,提高了系统的性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值