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`这样的十六进制字符串,通常这是由于字符编码不匹配导致的汉字乱码问题。这个问题主要涉及到数据库的字符集设置、应用程序的编码配置以及数据...
List<Teacher> teachers = (List) hibernateTemplate.findByNamedQuery("findTeachersByName"); ``` 5. **get(Class entityClass, Serializable id)**:根据主键获取实体对象。 - **示例**: ```java Long id ...
List<String> names = (List) hibernateTemplate.find("select name from Person where age > ?", new Object[]{18}); ``` #### 七、总结 通过本文的介绍,我们可以了解到`HibernateTemplate`在Spring框架中的...
gethibernatetemplate的find方法,find(String queryString);find(String queryString , Object value);find(String queryString, Object[] values);findByExample(Object exampleEntity);findByExample(Object ...
List<User> users = hibernateTemplate.find("from User where age > ?", new Object[]{20}); ``` 此外,HibernateTemplate还提供了`load()`、`execute()`等方法,以适应不同的业务需求。在实际开发中,为了事务的...
Session session = sessionFactory.getCurrentSession(); // 设置会话配置 configureSession(session); // 执行回调操作 try { return action.doInHibernate(session); } catch (HibernateException ex) { ...
User user = (User) hibernateTemplate.get(User.class, userId); if (user != null) { hibernateTemplate.delete(user); } } ``` 五、事务管理 Spring提供了声明式事务管理,可以在配置文件中定义事务管理器,...
hibernateTemplate常用方法.htm
return hibernateTemplate.get(User.class, id); } public List<User> findAllUsers() { return hibernateTemplate.find("from User"); } ``` **四、优缺点** 虽然HibernateTemplate简化了许多操作,但也有其...
return (List) hibernateTemplate.findByCriteria(detachedCriteria, startIndex, pageSize); } @Override public void save(LinkMan linkMan) { hibernateTemplate.save(linkMan); } @Override public ...
return (User) hibernateTemplate.get(User.class, id); } public void saveUser(User user) { hibernateTemplate.save(user); } public void updateUser(User user) { hibernateTemplate.update(user); }...
return hibernateTemplate.find("from Vip").size(); } @SuppressWarnings("unchecked") public List<Vip> getVips(int requestedPage) { int begin = (requestedPage - 1) * 11; if(begin ){ ...
《轻量级 J2EE 企业应用实战: Struts+Spring+Hibernate 整合开发》一书中详述了Spring与Hibernate的整合,其中一个重要组件就是HibernateTemplate。它为简化Hibernate在Spring框架中的使用提供了便利,减少了手动...
List list = hibernateTemplate.execute(new HibernateCallback() { @Override public List doInHibernate(Session session) throws HibernateException, SQLException { Query query = session.createQuery...
hibernateTemplate.save(user); } } ``` #### 四、避免直接获取Session 直接通过`getSession()`等方法获取`Session`对象可能会导致一系列问题: - **事务一致性**:如果在不同的地方获取了多个`Session`对象...
hibernateTemplate.save(user); } // 其他操作 } ``` 4. **源码分析**:通过阅读Spring和Hibernate的相关源码,我们可以更深入地理解这两个库是如何协同工作的。SessionFactory的创建过程、HibernateTemplate的...
return hibernateTemplate.get(User.class, id); } @Override public void save(User user) { hibernateTemplate.saveOrUpdate(user); } } ``` 4. **事务管理**: Spring 提供了声明式事务管理,可以在配置...
`HibernateTemplate`在事务管理、异常转换等方面提供了很多便利,而`HibernateDaoSupport`是一个抽象类,它的目的是为DAO提供对`HibernateTemplate`的便捷访问。 当我们在DAO中继承`HibernateDaoSupport`时,可以...
为了简化Hibernate与Spring的集成,Spring提供了HibernateTemplate类,它是Spring对Hibernate的一种封装,使得在DAO层操作数据库变得更加简便和安全。 首先,我们来看如何在DAO中使用HibernateTemplate。通常,DAO...