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(); } }
终于搞定了.学习软件开发是需要日积月累的。。。。更应正了一句最经典的话,,程序员是在错误中长大的!