session_flush

hibernate:session_flush;

session flush测试:

session flush方法主要做了两件事:

* 清理缓存
* 执行sql

session在什么情况下执行flush

* 默认在事务提交时
* 显示的调用flush
* 在执行查询前,如:iterate

hibernate按照save(insert),update、delete顺序提交相关操作


* 在执行事务提交前(commit)前会先执行flush,session-flush分为两种执行方法,手动和自动。

* 自动为系统默认隐含执行,手动为在需要执行的地方插入session-flush即可。


注:select @@tx_isolation; mysql的查询级别命令
set transaction isolation level read uncommitted; mysql设置级别的命令read uncommitted 为级别;总共有4个级别;

mysql默认隔离级别是“可重复读” ;
read uncommitted 为未提交读


“uuid”:如果id为uuid的话,执行插入后在save前是不会发出sql语句的,只是将user信息纳入到了session的管理,执行save后将保存。

“native和其它id方式”:在执行save前会发出sql语句,信息将插入到数据库中。
“脏数据”:save后但没事务提交的数据(save后但没提交就能读的数据)。

事务级别有4种,越高级别限制越严格

未提交读:未提交就能读到;
以提交读:已经提交的数据能读到;
可重复读:允许重复读(第一次读出的数据下次在读还是这个数据。);
序列化读:(性能非常不好,并发性几乎没有,当前的线程只有你能执行,只有你放弃了以后别人才能访问或做操作,就像悲观锁一样。)

//---------------------------------------------------------------

脏读:没有提交的数据就能读到;
不可重复读:例如第一次读出来时张三,在读出来就是李四,在读出来有问题的数据(不可在重复读。)(用悲观锁可以解决)
幻读:针对插入问题的。例如插入5条记录,但在查询会查到10条记录。因为表是所有线程都可以访问的,除非用锁来锁住。例如序列化读;


session.evict;


* 就是逐出在缓存中的对象。(就是save后的数据,在缓存中的);

例:session.save(user);
session.evict(user);
.commit();(提交事务)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值