在Action中获得Session的方法,
(1) 由Action容器来创建 Map<String,Object> session = ActionContext.getContext().getSession();
这是设置属性的值为:session.put("属性名", 属性名); 这种方法还可以创建request和application对象
(2) 实现ServletRequestAware时 private HttpSession session;
this.session=this.request.getSession();通过这个来设置Session的值,当设置属性时session.setAttribute("属性名",属性名);
以上两种方法没有本质的区别区别,getSession()这个方法只不过为get("session")提供了一个更方便的获取途径而已。
(3)Configuration取配置文件以及取得Session的两种方法的区别:
在得到SessionFactory的时候要先取得配置文件:Hibernate.cfg.xml文件 这时有Configuration类得到的:
new AnnotationConfiguration().configure().buildSessionFactory();
configure()方法自动会在classpath目录下找HIbernate.cfg.xml文件 ,当文件是别的名的时候就搜不到了这时要:
new AnnotationConfiguration().configure("hibernate.xml").buildSessionFactory();
区别:
openSession():永远打开新的session 需要close()
getCurrentSession(): 从上下文找在session没有提交前(session.getTransaction().commit()),打开的都是旧的session
用途: 界定事务边界 事务提交自动close(),需要配置上下文;<property name="current_session_context_class">thread</property>