Hibernate中Session的一些重要接口说明

一、关注2个方法:openSession和getCurrentSession

1、openSession 每次都是新的,需要close
2、getCurrentSession从上下文找,如果有,用旧的,如果没有,建新的
①. 用途,界定事务的边界(即可以在2个dao层用到同意Session)
②. 事务提交自动close
③. thread本地事务;jta是分布式事务,就是在2个数据库中用到的,并且需要应用服务器的支持,Tomcat是不支持的

// 本地thread 使用connection(也是Session)来管理事务
    <property name="current_session_context_class">thread</property> 
// 使用全局事务,用一个Connection是管理不了的
    <property name="current_session_context_class">jta</property>

二、持久化对象三种状态的关键区别(Transient,persistent,detached)

1、transient:内存中一个对象,没Id,缓存中也没有
2、persistent:内存中有,Session缓存中有,数据库有(Id)
3、detached:内存中有,Session缓存中没有,数据库有

三、获取数据库对象时load和get的区别:

1、load返回的是代理对象,等到真正用到对象的内容时才发出SQL语句
2、get直接从数据库加载,不会延迟
3、不存在记录时,load会抛出异常,而get方法会直接返回null

四、数据库中的Update方法使用

1、用来更新detached对象,更新完成后转为persistent状态
2、更新transient对象会报错,主要是因为数据库中没有跟记录的Id
3、更新自己设定id的transient对象可以(删除即delete方法也可以的),而且要数据库有对应的记录
4、p状态的对象只要设定了不同值的字段就会全部字段更新
5、更新部分更改的字段:
    ①. 在表的注解上添加@DynamicUpdate,或者在xml下也可以
    ②. 使用HQL进行更新(建议)
    ③. merge()方法也可以,不过如果是Session关闭后会执行select语句

五、Session中的clear()和flush()

1、无论是load还是get,都会首先查找缓存(一级缓存),如果没有,才会去数据库查找,调用clear()可以用来强制清除缓存。
2、flush方法可以进行从内存到数据库的同步!(其中有FlushModel的设置)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值