hibernate的flush,实体对象的特征

hibernate的flush

session flush方法主要做两件事:
 * 清理缓存
 * 执行sql

session 在什么情况下执行sql
 * 默认在事务提交时
 * 显示的调用flush
 * 在执行查询前,如 iterator

hibernate 按照save(insert),update,delete顺序提交相关操作,
可以通过flush来改变提交顺序,使hibernate按照我们的意愿执行

 因为user的主键生成采用uuid,所以完成save时,只是将user纳入到session的管理
 不会发出insert语句,但是已经生成id,session中existsInDatabase状态为false;
 session.save(user);
 调用flush,hibernate会清理缓存,执行sql;
 如果数据库的限制级别为未提交读,那么我们可以看到flush的数据
 并且session中existsInDatabase状态未true;
 session.flush();
 
 提交事务
 默认情况下commit操作会先执行那个flush清理缓存,所以不用显示的调用flush
 commit后数据是无法回滚的
 transaction.commit();
 
 如果user的主键生成策略为native,在调用session.save后,将执行insert语句,返回由数据库生成的id,
 纳入了session管理,修改了session中的existsInDatabase状态为true;
 如果数据库隔离级别设置为提交读,则可以看到flush过的数据
 
--------------------------------------------------------

测试实体对象的特征
 junit简介:
  * 编写测试类xxxTest,需要继承TestCase
  * 编写单元测试方法,测试方法必须以test开头,测试方法不能有返回值和参数,如:
   public void testDelete(){}
  * 单元测试代码最好新建一个目录
  
了解hibernate中CRUD操作

了解get和load的区别:
 * get不支持lazy,load支持lazy;
 * 采用get加载数据,如果没有匹配的数据返回null,而load抛出异常

transient状态的特征
 * 在数据库没有与之匹配的数据
 * 没有纳入session管理
 
persistent状态的特征
 * persistent状态的对象在数据库中又与之匹配的数据
 * 纳入了 session 管理
 * 在清理缓存(脏数据检查)时,会和数据库同步
 
detached状态的特征
 * 在数据库中有与之匹配的数据
 * 没有纳入session管理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值