标签:
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(); } }
Hibernate学习---第十四节:hibernate之session线程安全
标签:
原文地址:http://www.cnblogs.com/hwlsniper/p/4296946.html