扫码关注官方订阅号
Hibernate新手,如题,openSession()方法和getCurrentSession()方法有何种区别,二者的具体使用场景是什么???
openSession()
getCurrentSession()
人生最曼妙的风景,竟是内心的淡定与从容!
Hibernate openSession() 和 getCurrentSession() 的区别
getHiberanteTemplate 、getCurrentSession和OpenSession 采用getCurrentSession()创建的Session会绑定到当前的线程中去、而采用openSession()则不会。采用getCurrentSession()创建的Session在commit或rollback后会自动关闭,采用openSession()必须手动关闭。采用getCurrentSession()需要在hibernate.cfg.xml配置文件中加入如下配置:
Session
commit
rollback
hibernate.cfg.xml
如果是本地事物,及JDBC一个数据库:
<propety name=”Hibernate.current_session_context_class”>thread</propety>
如果是全局事物,及jta事物、多个数据库资源或事物资源:
<propety name=”Hibernate.current_session_context_class”>jta</propety>
使用spring的getHiberanteTemplate 就不需要考虑事务管理和session关闭的问题:
public List getEntityCriteria(final DetachedCriteria detachedCriteria) { return (List) getHibernateTemplate().executeFind( new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Criteria criteria = detachedCriteria .getExecutableCriteria(session); return criteria.list(); } }); } public List getEntityCriteriaByPage(final DetachedCriteria detachedCriteria,final Page page) { return (List) getHibernateTemplate().executeFind( new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Criteria criteria = detachedCriteria .getExecutableCriteria(session); criteria.setFirstResult(page.getFirstItemPos()); criteria.setMaxResults(page.getPageSize()); return criteria.list(); } }); } DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Department.class); detachedCriteria.add(Restrictions.eq("eid", seacher.getEid()));//企业id为条件查询 detachedCriteria.add(Restrictions.in("dprtid", ids));//根据id数组查询部门 detachedCriteria.add(Restrictions.like("name", "%" + seacher.getName()+ "%"));//名称模糊查询 getEntityCriteriaByPage(detachedCriteria,pageinfo);
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
Hibernate
openSession()和getCurrentSession()的区别getHiberanteTemplate 、getCurrentSession和OpenSession
采用
getCurrentSession()创建的Session会绑定到当前的线程中去、而采用openSession()则不会。采用
getCurrentSession()创建的Session在commit或rollback后会自动关闭,采用openSession()必须手动关闭。采用
getCurrentSession()需要在hibernate.cfg.xml配置文件中加入如下配置:如果是本地事物,及JDBC一个数据库:
如果是全局事物,及jta事物、多个数据库资源或事物资源:
使用spring的getHiberanteTemplate 就不需要考虑事务管理和session关闭的问题: