一、在spring中提供了两种方法来管理session
第一种是用户直接getSession(),在这种情况下请注意了,如果你没有配置事务的话,请注意关闭session
第二种是用spring的HibernateTemplate进行管理,除了通常的crud,HibernateTemplate都为我们封装好了,直接调用就行了,但如果想自己封装的话
就得调用HibernateTemplate中的方法execute(HibernateCallBack action)
调用这个方法时要注意重写HibernateCallBack中的方法doInHibernate(Session session),在这种情况下很简单..session的开关,不用你来管,直接由hibernate事务管理器进行管理了
二、请注意以下
以下均为
同一线程
1.spring中的session在没有配置事务的前提下session事务默认是自动提交的
可以由以下的代码得知:
getSession().connection().getAutoCommit()//true
NOTE:在spring中getSession()
(1)假如你没有配置事务,则其每次都会产生一个新的session对象
你可以在没有配置事务的前提下用以下的代码测试:
getSession() == getSession()//false
(2)假如你配置了事务,则每次getSession()得到了都是同一个对象
getSession() == getSession()//true
但在配置了事务的前提下有一种情况判断session相等其结果为false
例如:在HibernateTemplate中代码如下:
doExecute(HibernateCallback<T> action, boolean
enforceNewSession, boolean enforceNativeSession);
/*
调用这个方法时,如果参数enforceNativeSession的值为false的话
则在HibernateCallback的方法
public Object doInHibernate(Session argsession){
System.out.println(argsession == getSession());
//输出为false,这是为什么呢,原因是enforceNativeSession传入的
//值如果是false,表示不把这个doExecute方法中得到的session暴露给
//用户,所以其返回给用户的是session的代理,也就是说argsession只
//是一个代理,所以argsession == getSession()得到的结果为
//false,如果enforceNativeSession为true,则相反,可以得到true
}
*/
2.spring中,假如在配置文件中配置了事务,则其session事务则不是自动提交的
可以通过
getSession().connection().getAutoCommit()//false
3.单独使用hibernate时,其session事务是不会自动提交的,请注意
所以个人认为最好在配置中将hibernate.autocommit设置为false
分享到:
相关推荐
其中Hibernate每次都需要手动创建SessionFactory,Session,手动开启提交关闭事务。而这一切操作完全是由Spring来代替。使持久层更加方便,使开发人员减少持久层操作,把注意力放到业务上。
有效的Session管理:Spring提供了有效、简单、安全的Hibernate Session处理。 IoC容器降低了DAO组件与业务逻辑层之间的耦合性。 DAO模式的使用,降低了系统重构的代价。 方便的事务管理:Spring提供的声明式事务处理...
Spring与Hibernate集成中的session.doc
12.6 整合Struts、Spring和Hibernate实现用户管理 12.6.1 Struts、Spring和Hibernate的整合方式 12.6.2 编写用户注册画面regedit.jsp 12.6.3 编写用户登录画面login.jsp 12.6.4 编写注册控制器RegeditAction.java ...
在spring+hibernate的框架中定时操作数据库,主要是拿到sessionFactory,不会出现no session 和transaction no-bound等问题,由sessionFactory完成对数据的操作,有些包是没有用的,有兴趣的可以自己删除掉
1、Spring 3.x 对 Hibernate 4.x 不提供 HibernateDaoSupport,所以在dao的实现层注入SessionFactory 2、报错:org.hibernate.HibernateException: No Session found for current thread 意思是必须在...
12.6 整合Struts、Spring和Hibernate实现用户管理 12.6.1 Struts、Spring和Hibernate的整合方式 12.6.2 编写用户注册画面regedit.jsp 12.6.3 编写用户登录画面login.jsp 12.6.4 编写注册控制器RegeditAction.java ...
12.6 整合Struts、Spring和Hibernate实现用户管理 12.6.1 Struts、Spring和Hibernate的整合方式 12.6.2 编写用户注册画面regedit.jsp 12.6.3 编写用户登录画面login.jsp 12.6.4 编写注册控制器RegeditAction.java ...
1.Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭...
spring5+hibernate5+Spring-session-data-redis2+Spring-data-redis2整合
解决org.hibernate.LazyInitializationException: could not initialize proxy - no Session...
部门人员一对多的CRUD操作 hibernate: 管理实体...spring:数据源配置与获得session IOC依赖注入 和 AOP 事务管理 jsf : backing bean的操作 jsf 标签应用 jsf 信息国际化以资源绑定 jsf 表单验证 jsf 导航设定
Hibernate Session的轻量级封装 * 默认情况下运行期异常才会回滚(包括继承了RuntimeException子类),普通异常是不会滚的 * 编写业务逻辑方法时,最好将异常一直向上抛出,在表示层(struts)处理 * 关于事务...
手把手教你用myeclipse新建SSH项目struts2+spring+hibernate 功能_Spring编码过滤Servlet_session超时设置_Spring事务管理器的另一种用法
LaySSH 是一款完全开源免费的开发框架,基于 LayUI+SpringMVC+Spring+Hibernate+Mysql 搭建而成,内置代码生成器,能够快速生成增删改查代码,节省开发时间,快速构建企业级的 web 应用系统。 该框架具备一整套完整...
完整的spring +springmvc+hibernate+shiro项目实例,详细的shiro配置介绍,通过redis管理用户session缓存。。。。。。。。
spring4.3+hibernate4.3+springmvc+nginx+Redis实现session共享demo
比如说hibernate,我问一个同学session接口的get和load方法有何异同,这位同学含糊了半天没答上来,连这两个方法干什么的都不知道,你是怎么把代码写出来的。问另一个精通struts的同学,HttpServletRequest的...
SpringMVC+Hibernate+annotation+Easyui权限管理系统,Session过期控制(包括Ajax请求的过期控制),访问权限控制(权限控制到按钮),hibernate数据库用户名与密码加密,其它的不说了,绝对物有所值
一个实例小工程,讲解的是将hibernate的sessionFactory交给spring管理的配置方法