1、hibernate.cfg.xml 文件中添加如下代码开启线程安全:

<property name="hibernate.current_session_context_class">thread</property>

具体如下:

<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql:///hibernate</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">123456</property>  
        <property name="hibernate.hbm2ddl.auto">update</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.current_session_context_class">thread</property>
        <mapping resource="learn\hibernate\bean\Person.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

2、测试:

package learn.hibernate.test;

import static org.junit.Assert.*;


import learn.hibernate.bean.Person;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class TestHibernate {

    SessionFactory factory = null;
    Session session = null;
    Transaction tx = null;
    
    /**
     * 测试之前初始化数据
     * @throws Exception
     */
    @SuppressWarnings("deprecation")
    @Before
    public void setUp() throws Exception {
        System.out.println("---------初始化数据----------");
        
        Configuration config = new Configuration().configure();
        ServiceRegistry sr = new ServiceRegistryBuilder()
        .applySettings(config.getProperties()).buildServiceRegistry();
        factory = config.buildSessionFactory(sr);
        //session = factory.openSession();
        // 获得一个线程安全的session,多线程环境下使用
        session = factory.getCurrentSession();
    }

    /**
     * 测试之后释放(销毁)数据
     * @throws Exception
     */
    @After
    public void tearDown() throws Exception {
        System.out.println("---------释放数据----------");
        // 获得的是线程安全的session,不需要程序控制关闭,事务提交后就会自动关闭
        /*if(session.isOpen()){
            session.close();
        }*/
    }
    
    /**
     * 批量写入数据
     */
    @Test
    public void testAdd(){
        tx = session.beginTransaction();
        
        Person person = new Person("admin", 22, 123456, null);
        session.persist(person);
        
        tx.commit();
    }
    
    @Test
    public void testGet(){
        // 如果获得的是线程安全的session,那么要开启事务
        tx = session.beginTransaction();
        Person p = (Person)session.get(Person.class, 12);
        System.out.println(p);
        tx.commit();
    }
}
posted on 2015-02-21 12:53  hwlsniper  阅读(1052)  评论(0编辑  收藏  举报