hibernate通过Session来操作对象

Session概述

hibernate通过Session来操作对象

Session缓存

hibernate通过Session来操作对象
执行了两次查询,但是却只是执行了一次sql语句

一级缓存

hibernate通过Session来操作对象

操作Session缓存

hibernate通过Session来操作对象

flush 使得数据表中的记录和Session缓存中的对象的状态保持一致,为了保持一致,可能会发送对应的SQL语句

1.在Transation的commit方法中 ,先调用session的flush方法.再提交事务
2.flush 可能会发送SQL语句 ,但不会提交事务
3.注意
1) 在未提交事务或显示调用Session.flush()方法之前,也有可能会进行flush操作
执行HQL或QBC查询 会先进行flush操作,以得到数据表最新的记录
若记录的id是由底层数据库使用自增的方式生成的,则在调用save()方法后,就会立即发送insert语句 因为save方法后,必须保证对象的id是存在的
hibernate通过Session来操作对象

reflush 会强制发送select语句,以使得session缓存对象的状态和数据表中对应的记录保持一致

几种方法

save( ) 保存对象
persist() 会执行insert操作 和save的区别 在persist之前若对象已经有id了则不会执行insert 而会抛出一个异常 save不会 save会直接insert

get() 加载一个对象 立即检索
load() 延迟检索
区别:
1.执行get方法会立即加载对象,执行load方法,若不使用该对象则不会立即执行查询语句,而是返回一个动态代理对象(延迟加载)
2.若数据表中没有对应的记录 get返回null load 抛异常
3.load方法可能会抛出懒加载异常,也就是还没加载的时候session被关闭了,就加载不了了,所以就会抛出这个异常

update()
1.若更新一个持久化对象,不需要显示的调用update方法,因为在调用Transaction的commit方法时,会先执行session的flush方法
2.更新一个游离对象,需要显示的调用session的update方法–>可以把一个游离对象变成一个持久化对象
需要注意的是:
无论更新的游离对象是否和数据表中的数据一样,都会执行update操作
hibernate通过Session来操作对象
hibernate通过Session来操作对象