Hibernate:doInHibernate

15 篇文章 0 订阅
13 篇文章 0 订阅

===HibernateCallback_doInHibernate
1.可以获取到Session
2.spring管理session,管理事务

链接:http://silentjesse.iteye.com/blog/965013 
在spring中提供了两种方法来管理session 
第一种是用户直接getSession(),在这种情况下请注意了,如果你没有配置事务的话,请注意关闭session 
第二种是用spring的HibernateTemplate进行管理,除了通常的crud,HibernateTemplate都为我们封装好了,直接调用就行了,但如果想自己封装的话,就得调用HibernateTemplate中的方法execute(HibernateCallBack action) 
调用这个方法时要注意重写HibernateCallBack中的方法doInHibernate(Session session),在这种情况下很简单..session的开关,不用你来管,直接由hibernate事务管理器进行管理了 

链接:http://blog.csdn.net/dingherry/article/details/7056560
在Spring的框架中,HibernateTemplate包装了Hibernate的session操作,帮我们管理事务;
但是使用HibernateTemplate后,就不能直接访问到Session了。
如果我们通过类似getSession()这样的方法获得了Session,那我们又得自己去管理事务。

不过,如果我们非得使用session来完成业务而又不想去管事务上的事,Spring,她依然可以帮我们完成这种有点BT的需求。
HibernateTemplate提供HibernateCallback,就是为了满足这种使用了HibernateTemplate的情况下,仍然需要直接访问Session的需求而来的。它提供了在HibernateTemplate里面直接访问Session的能力,程序员不必人为的管理session对象, 这个就是使用HibernateCallback的原因。

链接:http://www.blogjava.net/rain1102/articles/170638.html
HibernateTemplate还提供一种更加灵活的方式来操作数据库,通过这种方式可以完全使用Hibernate的操作方式。HibernateTemplate的灵活访问方式是通过如下两个方法完成:
      Object execute(HibernateCallback action)
      List execute(HibernateCallback action)
HibernateCallback是一个接口,该接口只有一个方法doInHibernate(org.hibernate.Session session),该方法只有一个参数Session。 
注意:方法doInHibernate方法内可以访问Session,该Session对象是绑定到该线程的Session实例。该方法内的持久层操作,与不使用Spring时的持久层操作完全相同。这保证对于复杂的持久层访问,依然可以使用Hibernate的访问方式。

例子:

// 批量保存文件数据
userDao.getHibernateTemplate().execute(new HibernateCallback<Object>() {


public Object doInHibernate(Session se) throws HibernateException,
SQLException {
se.beginTransaction();
se.save(pt);
for (PtRecord sf : recordList) {
se.save(sf);
}
se.getTransaction().commit();
se.flush();
se.clear();
return null;
}


});

链接: 
http://wing90.blog.51cto.com/8222863/1337618
http://yeyhan.blog.163.com/blog/static/44179333201022942856795/
http://blog.csdn.net/woisnong/article/details/7423914
http://www.blogjava.net/caixuetao/articles/113433.html 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1 org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1 at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:61) at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:46) at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:68) at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298) at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:41) at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:969) at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1690) at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142) at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152) at com.sinosoft.sysframework.persistence.HibernateSQLQuery.doInHibernate(HibernateSQLQuery.java:118) at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:366) at org.springframework.orm.hibernate3.HibernateTemplate.executeFind(HibernateTemplate.java:338) at com.sinosoft.sysframework.persistence.BaseDaoHibernateImpl.queryList(BaseDaoHibernateImpl.java:224) at com.sinosoft.application.reins.persistence.hibernate.base.GrRePlanItemDaoHibernateImplBase.find(GrRePlanItemDaoHibernateImplBase.java:127) at com.sinosoft.application.reins.service.spring.GrTrialServiceSpringImpl.endorTrialDataSurrender(GrTrialServiceSpringImpl.java:9536) at com.sinosoft.application.reins.service.
最新发布
06-03

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值