1、异常描述
Exception in thread "main" org.hibernate.HibernateException: createQuery is not valid without active transaction
备注:
此处hibernate版本号:3.6.10.Final
2、示例代码
以下是部分示例代码:
public class ClazzDao {
public List<Clazz> findAll(){
// 1、创建配置对象 查找hibernate.cfg.xml文件
Configuration configure = new Configuration().configure();
// 2、创建session工厂
SessionFactory sessionFactory = configure.buildSessionFactory();
// 3、创建session
Session session = sessionFactory.getCurrentSession();
// 4、创建Query对象(hql语句)
Query query = session.createQuery("from Clazz");
// 5、执行查询
List list = query.list();
return list;
}
}
/* 测试代码 */
public class TestClazzDao {
ClazzDao clazzDao = new ClazzDao();
@Test // 测试查询
public void test1(){
List<Clazz> list = clazzDao.findAll();
for (Clazz clazz : list) {
System.out.println(clazz);
}
}
}
错误原因:
在hibernate中,查询也需要事务的支持,所以,必须添加事务相关控制代码
3、解决方法
public class ClazzDao {
public List<Clazz> findAll(){
// 1、创建配置对象 查找hibernate.cfg.xml文件
Configuration configure = new Configuration().configure();
// 2、创建session工厂
SessionFactory sessionFactory = configure.buildSessionFactory();
// 3、创建session
Session session = sessionFactory.getCurrentSession();
// 开启事务
Transaction transaction = session.beginTransaction();
// 4、创建Query对象(hql语句)
Query query = session.createQuery("from Clazz");
// 5、执行查询
List list = query.list();
// 提交事务
transaction.commit();
return list;
}
}
此文希望可以帮助到大家。如有错误,请指教。
如果大家还有其他的情况或者好的解决方法,也望指教,感谢阅读。