Hibernate更新数据

public boolean update(Livestock ls) throws HibernateException {


Transaction tx = null;
try {
Session session = this.getSession();
tx = session.beginTransaction();
Livestock d = new Livestock();
session.clear();//此方法不调用有可能出错,a different object with the same identifier value was already associated with the session:
session. load(d, ls.getEarTag());
d.setType(ls.getType());
d.setWeight(ls.getWeight());
d.setSupplyBill(ls.getSupplyBill());
d.setWareStatus(ls.getWareStatus());
d.setCarcasses(ls.getCarcasses());
session. update(d);
session.flush();
tx.commit();
return true;
} catch (HibernateException e) {
e.printStackTrace();
if (tx != null)
tx.rollback();
return false;
} finally {
this.sessionClose();
}

}

Session.load执行过程:

在执行session.load时,Hibernate首先从当前session的一级缓存中获取id对应的值,如果获取不到,将根据该对象是否配置了二级缓存来做相应的处理,若配置了二级缓存,则从二级缓存中获取id对应的值,若仍然获取不到则还需要根据是否配置了延迟加载来决定如何执行,若未配置延迟加载则从数据库中直接获取,在从数据库获取到数据的情况下,Hibernate会相应的填充一级缓存和二级缓存,如配置了延迟加载则直接返回一个代理类,只有在触发代理类的调用时才进行数据库查询的操作。

一级缓存----->二级缓存------>延迟加载-------->数据库

因此在session一直打开的情况下,要注意在适当的时候对一级缓存进行刷新操作,通常是在该对象具有单向关联维护的时候,在Hibernate中可以使用象session.clear、session.evict的方式来强制刷新一级缓存。

二级缓存则在数据发生任何变化(新增、更新、删除)的情况下都会自动的被更新。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值