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();(提交事务)
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();(提交事务)