session的一级缓存


注:session获取了一个对象然后修改了这个对象的信息,但是session会先去session缓存里面查找是否存在这个对象,如果存在这个对象就不会去数据库访问。




注:操作session的方法有flush()、reflush()、clear()这三个方法。

1.flush()方法的调用时间(如果持久化类有变化强制使数据库表发生变化)

1).flush()方法默认是在事务提交( transaction.commit() )的时候去调用flush()方法

2).如果手动调用flush()方法就会在调用的地方被调用

3)当应用程序执行一些查询操作时,如果缓存中持久化对象的属性已经发生变化,会先flush()缓存,以保证查询结果能保持最新状态

flush缓存的例外情况:  在执行save(xxxx)方法时,如果 类关系映射文件里面的主键的生成方式是hibernate生成的话( <generator class="hilo" /> )是在提交事务的时候进行插入操作然后执行flush()方法最后提交,如果是数据库本身自动生成的策略的话(    <generator class="native" /> ),就会立即插入操作,在提交事务的时候再执行flush()方法最后执 行提交操作。

2.reflush()方法(如果数据库表信息发生改变会强制使持久化类发生改变)

在mysql数据库要改一下数据库的隔离级别,在hibernate.cfg.xml的文件中设置为<property name="connection.isolation">2</property>才起作用

3.clear()方法 (会使缓存全部消失)

4.commit()和flush()方法的区别:flush执行一系列sql语句,但不提交事务,commit()方法先调用flush()方法,然后提交事务,意味着提交事务对数据库的操作会永久保存下来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值