为hibernate性能编写好的代码

时间:2015-06-18 04:26:55

标签: java hibernate

我在申请中遇到了一些性能问题。特别是在保存到数据库并从中检索时。 我的应用程序是一个独立的应用程序不是网络应用程序。我正在使用hibernate进行数据库通信。 此应用程序尚未投入生产。该应用程序将同时使用50人。

以下是我用于获取会话的代码。我怀疑下面是变慢的代码。

public class HibernateUtil {

    public Session getSession() {

        SessionFactory buildSessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
        Session session = buildSessionFactory.openSession();
        return session;
    }

    public Transaction getTransaction() {
        return getSession().getTransaction();
    }

}

我不知道如何为开启会话编写一个好的代码。 任何人都可以建议如何将这些代码重构为一个好的代码?

2 个答案:

答案 0 :(得分:2)

此外,会话是否已关闭,意味着一旦线程完成了一个过程,我们是否会关闭会话。

除非遵守代码,否则您的问题没有单一的陈述答案,系统的性能取决于很多属性。

1。)GC - 何时使用哪种算法。

2。)有多少session are getting opened,是否有任何空闲的会话。应避免长时间运行。

3。)在代码中引入Caching mechanism,Hibernate二级缓存,查询缓存

4.。)如何从数据库中检索big the objects

5.)many queries如何被解雇为DB。

请参阅thisthis

答案 1 :(得分:2)

我过去遇到过类似的问题,这个问题的根本原因是你每次尝试进行交易时都会创建工厂实例。

请使用单例模式创建SessionFactory对象,意味着只需创建一次Session工厂并从该工厂对象获取所有会话实例,我相信在此更改后您将不会遇到性能问题

更改下面的内容 -

static SessionFactory buildSessionFactory;

public static getSessionFactory() {
    if(buildSessionFactory==null) {
        buildSessionFactory = new          
        AnnotationConfiguration().configure().buildSessionFactory();
    }
}

public Session getSession() {
    getSessionFactory();
    Session session = buildSessionFactory.openSession();
    return session;
}

public Transaction getTransaction() {
    return getSession().getTransaction();
} 

它将解决您的问题