org.hibernate.HibernateException: No CurrentSessionContext configured!

今天在测试的时候遇到了org.hibernate.HibernateException:NoCurrentSessionContextconfigured!错误。。。找了半天,在百度上才发现是什么原因。。。

初学hibernate,出现NoCurrentSessionContextconfigured错误,检查了几次配置都没有发现问题,最后上网查找发现是配置文件的问题

解决如下:

在集成Hibernate的环境下(例如Jboss),在hibernate.cfg.xml中session-factory段加入:

<propertyname="current_session_context_class">jta</property>

在不集成Hibernate的环境下(例如使用JDBC的独立应用程序),在hibernate.cfg.xml中session-factory段加入:

<propertyname="current_session_context_class">thread</property>

加入了这句话什么测试类就可以运行了。。。。哎,这个错误我来记录下

package org.huawei.hibernate.junit;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.huawei.hibernate.Teacher;
import org.huawei.hibernate.zhicheng;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

/**
 * @作者: 何枫
 * @日期: 2011-4-10下午11:57:04
 * @版本: V 1.0 
 * @标题: SaveTest.java
 * @包名: org.huawei.hibernate.junit
 * @描述: TODO(用一句话描述该文件做什么)
 */
 public class SaveTest {
	private static SessionFactory sessionFactory;
	
	@BeforeClass
	public static void beforeClass() {
			sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
	}
	@AfterClass
	public static void afterClass() {
		sessionFactory.close();
	}
	@Test
	public void testSaveWith3State() {
	
		Teacher t = new Teacher();
		
		t.setName("何枫");
		t.setTitle("middle");
		t.setZhicheng(zhicheng.A);
		//t.setBirthDate(new Date());
		t.setDate(new Date());
		//Session session = sessionFactory.openSession();
         /*
		 * 在使用sessionFactory.getCurrentSession()是必须在hibernate的配置文件中加入
		 * <property name="current_session_context_class">thread</property> 
		 */
       /**
		 * openSession与getCurrentSession的区别是:
		 * openSession每次都是新的,需要close
		 * getCurrentSession从上下文找,如果有,用旧的,如果没有,建新的
		 * 	1.用途,界定事务边界
		 * 	2.事务提交自动close
		 */
		Session session = sessionFactory.getCurrentSession();
		session.beginTransaction();
		session.save(t);
		System.out.println(t.getId());
		session.getTransaction().commit();
		//session.clear();
		System.out.println(t.getId());
	}
	
	 
	public static void main(String[] args) {
		beforeClass();
	}
}

终于搞定了.学习软件开发是需要日积月累的。。。。更应正了一句最经典的话,,程序员是在错误中长大的!

相关推荐