日期:2014-05-17  浏览次数:20753 次

Hibernate怎么释放连接啊?
本帖最后由 dut_singer 于 2013-12-13 12:00:32 编辑
以下是我的代码,在mysql里看每执行一次,就增加3个连接数,执行到N次后,就达到最大连接数了,第一次用Hibernate,版本是4.2.7,不太知道怎么使用,照例子做的,请帮我分析一下连接没有释放的原因。

Configuration conf = new Configuration().configure();
ServiceRegistryBuilder builder = new ServiceRegistryBuilder().applySettings(conf.getProperties());  
        ServiceRegistry registry = builder.buildServiceRegistry();
SessionFactory sf = conf.buildSessionFactory(registry);
Session sess = sf.getCurrentSession();
try{
this.setError((Error)sess.get(Error.class,error.getError_id()));
if( error.getReport_status()==1){
List lt= sess.createQuery("select distinct s from Solves as s where error =:error")
.setEntity("error", error)
.list();
this.setSolve((Solves)(lt.iterator().next()));
}
List lt = sess.createQuery("select distinct p from Platform as p")
.list();
for (Iterator pit =  lt.iterator(); pit.hasNext();)
{
    platforms.add( (Platform)pit.next());
}
return SUCCESS;
}catch(Exception e){
e.printStackTrace();
sess.getTransaction().rollback();
}finally{
sess.close();
}

------解决方案--------------------
SessionFactory sf 应为全局唯一变量
------解决方案--------------------
 Configuration conf = new Configuration().configure();
        ServiceRegistryBuilder builder = new ServiceRegistryBuilder().applySettings(conf.getProperties());  
        ServiceRegistry registry = builder.buildServiceRegistry();
        SessionFactory sf = conf.buildSessionFactory(registry);

这个 SessionFactory 每次都创建一个 ,就会这样  ,你可以单写个类,是单例的 ,每次都取这个SessionFactory 就可以了
------解决方案--------------------
import java.io.File;

import org.apache.log4j.Logger;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateSessionFactory {

  private static final Logger logger = Logger
      .getLogger(HibernateSessionFactory.class);

  private static Configuration configuratio