Session不是线程安全的,应该避免多个线程共享同一个Session实例. Session通过SessionFactory打开,在所有的工作完成后,需要关闭.使用一个工具类生成SessionFactory,通过方法返回SessionFactory
package com.util;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static Configuration cfg;
private static SessionFactory sessionFactory;
static {
try {
cfg = new Configuration().configure();
sessionFactory = cfg.buildSessionFactory();
}catch (Exception e) {
e.printStackTrace();
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
保证在一个线程中仅存在一个Session实例
getCurrentSession方法,保证了线程中Session的唯一性;
使用如下线程安全的session
Configuration configuration = new Configuration.configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.getCurrentSession()
在hibernate.cfg.xml中添加如下配置
<!-- 配置getCurrentSession -->
<property name="hibernate.current_session_context_class">thread</property>