`
u011721609
  • 浏览: 45442 次
社区版块
存档分类
最新评论

hibernateTemplate.getSessionFactory().getCurrentSession()

 
阅读更多

hibernateTemplate.getSessionFactory().getCurrentSession()

我们使用spring和hibernate结合,操作数据库最常用可能是HibernateTemplate,HibernateTemplate中集成了很多使用的方法,可惜的是没的createQuery方法,也许我们使用hibernate的时候喜欢使用Query,我们可能会封装hibernateTemplate.getSessionFactory().getCurrentSession()方法得到Session,session创建Query,这是一个方法,但你应该会得到异常 “createQuery without an active transaction”,因为使用hibernateTemplate.getSessionFactory().getCurrentSession(),你是使用的hibernate的事务管理,而你指望spring管理的事务是hibernateTemplate,所以你会提示没有打开事务的异常,解决方法:1)使用hibernate事务处理,就像上面单独使用hibernate一样,但这也许不是你想要的。2)使用hibernateTemplate的HibernateCallBack回调:

return hibernateTemplate.executeWithNativeSession(
	new HibernateCallback<List<T>>() {
	public  List<T> doInHibernate(Session session) 
	throws HibernateException, SQLException {
		return session.createQuery
		("FROM " + entityClass.getName() + " WHERE id IN (:ids)")//
		.setParameterList("ids", idList).list();
	}

实际上hibernateTemplate中封装的find方法也很强大,如果熟练使用完全可以替代createQuery的。

备注:

如果出现异常:对同一个集合处理不能使用2个session,这是因为getCurrentSession方法出错,导致打开一个新的session,检查配置文件,如果使用tomcat+spring+hibernate 配置hibernate.current_session_context_class 最好为thread,虽然支持jta,配置比较麻烦,而且jta支持多个sessionFactory,即可以跨数据库,比较强大!

如果hibernate+spring出现session没有提交情况,应该是你让spring负责事务处理,而你有使用了hibernate的session,从而脱离spring事务处理,即没的begintransaction和commit之类的操作了。

分享到:
评论

相关推荐

    HibernateTemplate.saveOrUpdate时出现\xE7\x84十六进制之类的字符串

    在使用HibernateTemplate的saveOrUpdate方法时,如果遇到类似`\xE7\x84`这样的十六进制字符串,通常这是由于字符编码不匹配导致的汉字乱码问题。这个问题主要涉及到数据库的字符集设置、应用程序的编码配置以及数据...

    hibernateTemplate的常用方法

    List&lt;Teacher&gt; teachers = (List) hibernateTemplate.findByNamedQuery("findTeachersByName"); ``` 5. **get(Class entityClass, Serializable id)**:根据主键获取实体对象。 - **示例**: ```java Long id ...

    HibernateTemplate详细描述以及使用范围

    List&lt;String&gt; names = (List) hibernateTemplate.find("select name from Person where age &gt; ?", new Object[]{18}); ``` #### 七、总结 通过本文的介绍,我们可以了解到`HibernateTemplate`在Spring框架中的...

    gethibernatetemplate的find方法

    gethibernatetemplate的find方法,find(String queryString);find(String queryString , Object value);find(String queryString, Object[] values);findByExample(Object exampleEntity);findByExample(Object ...

    SSH2增删改查使用HibernateTemplate

    List&lt;User&gt; users = hibernateTemplate.find("from User where age &gt; ?", new Object[]{20}); ``` 此外,HibernateTemplate还提供了`load()`、`execute()`等方法,以适应不同的业务需求。在实际开发中,为了事务的...

    HibernateTemplate源代码

    Session session = sessionFactory.getCurrentSession(); // 设置会话配置 configureSession(session); // 执行回调操作 try { return action.doInHibernate(session); } catch (HibernateException ex) { ...

    Spring整合hibernate(2)之基于HibernateTemplate的整合

    User user = (User) hibernateTemplate.get(User.class, userId); if (user != null) { hibernateTemplate.delete(user); } } ``` 五、事务管理 Spring提供了声明式事务管理,可以在配置文件中定义事务管理器,...

    hibernateTemplate常用方法.htm

    hibernateTemplate常用方法.htm

    对hibernate的封装 HibernateTemplate

    return hibernateTemplate.get(User.class, id); } public List&lt;User&gt; findAllUsers() { return hibernateTemplate.find("from User"); } ``` **四、优缺点** 虽然HibernateTemplate简化了许多操作,但也有其...

    详解Javaee Dao层的抽取

    return (List) hibernateTemplate.findByCriteria(detachedCriteria, startIndex, pageSize); } @Override public void save(LinkMan linkMan) { hibernateTemplate.save(linkMan); } @Override public ...

    spring和hibernate整合示例

    return (User) hibernateTemplate.get(User.class, id); } public void saveUser(User user) { hibernateTemplate.save(user); } public void updateUser(User user) { hibernateTemplate.update(user); }...

    会员管理系统(struts+hibernate+spring).zip

    return hibernateTemplate.find("from Vip").size(); } @SuppressWarnings("unchecked") public List&lt;Vip&gt; getVips(int requestedPage) { int begin = (requestedPage - 1) * 11; if(begin ){ ...

    HibernateTemplate 的常规用法.doc

    《轻量级 J2EE 企业应用实战: Struts+Spring+Hibernate 整合开发》一书中详述了Spring与Hibernate的整合,其中一个重要组件就是HibernateTemplate。它为简化Hibernate在Spring框架中的使用提供了便利,减少了手动...

    HibernateTemplate分组统计

    List list = hibernateTemplate.execute(new HibernateCallback() { @Override public List doInHibernate(Session session) throws HibernateException, SQLException { Query query = session.createQuery...

    关于使用HibernateTemplate

    hibernateTemplate.save(user); } } ``` #### 四、避免直接获取Session 直接通过`getSession()`等方法获取`Session`对象可能会导致一系列问题: - **事务一致性**:如果在不同的地方获取了多个`Session`对象...

    一个模拟Spring将SessionFactory注入到HibernateTemplate的小例子

    hibernateTemplate.save(user); } // 其他操作 } ``` 4. **源码分析**:通过阅读Spring和Hibernate的相关源码,我们可以更深入地理解这两个库是如何协同工作的。SessionFactory的创建过程、HibernateTemplate的...

    spring整合Hibernate学习笔记.docx

    return hibernateTemplate.get(User.class, id); } @Override public void save(User user) { hibernateTemplate.saveOrUpdate(user); } } ``` 4. **事务管理**: Spring 提供了声明式事务管理,可以在配置...

    HibernateTemplate及generator用法.doc

    `HibernateTemplate`在事务管理、异常转换等方面提供了很多便利,而`HibernateDaoSupport`是一个抽象类,它的目的是为DAO提供对`HibernateTemplate`的便捷访问。 当我们在DAO中继承`HibernateDaoSupport`时,可以...

    HibernateTemplate及generator用法.docx

    为了简化Hibernate与Spring的集成,Spring提供了HibernateTemplate类,它是Spring对Hibernate的一种封装,使得在DAO层操作数据库变得更加简便和安全。 首先,我们来看如何在DAO中使用HibernateTemplate。通常,DAO...

Global site tag (gtag.js) - Google Analytics