天天看点

Hibernate异常之Exception in thread "main" org.hibernate.HibernateException: createQuery is not valid...

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;
	}

}
           

此文希望可以帮助到大家。如有错误,请指教。                                                           

如果大家还有其他的情况或者好的解决方法,也望指教,感谢阅读。 

继续阅读