Hibernate选择查询需要时间

时间:2014-05-29 07:25:06

标签: hibernate jsp

我正在使用jsp和hibernate。以下是我的功能 -

public static List<user_detail>  getData(String username)
    {
       List<user_detail> list = null;
        try{
        Session session=newConfiguration().configure().buildSessionFactory().openSession(); 
        Transaction tx=session.beginTransaction();
        Query query = session.createQuery("from user_detail where username = :user");
        query.setParameter("user", username);
        list =  query.list();
        Iterator<user_detail> itr=list.iterator();  
        while(itr.hasNext()){  
                  descLog("Parameters"+itr.next()+"\n");
        }
        }
        catch(Exception e)
        {
            writeLog(e);
        }


        return list;
    }

我从jsp页面调用此函数。但问题是每次此功能需要大约5秒钟。我表中只有一条记录。为什么这需要时间? 如何减少这段时间?

1 个答案:

答案 0 :(得分:2)

上面的代码有很多问题:

  1. 您每次调用时都会创建一个新的SessionFactory。 SessionFactory应该只创建一次,并在应用程序的整个生命周期中重用。创建SessionFactory意味着读取配置,分析它,构建所有实体的元模型,根据数据库模式进行检查等。
  2. 您正在开始一项交易,但从不提交或回滚它
  3. 您正在开会,但忽略了关闭它。这意味着内存泄漏,这也意味着底层数据库连接永远不会关闭。
  4. 您不尊重Java命名约定。该类应命名为UserDetail,而不是user_detail
  5. 我建议您从头开始重新阅读Hibernate参考文档。