实施JPA后,事务性注释会降低性能

时间:2019-07-08 07:18:33

标签: java spring hibernate jpa

我正在升级我的应用程序,当前它正在使用Hibernate 3,现在正在迁移到jpa-hibernate 4。 我们有一个实用程序类BaseDAO,用于所有与数据库相关的操作,例如executeQueryexecuteUpdate等。会话也仅在此进行管理。 当前,我们在使用get方法显示数据或进行单个更新/创建/删除操作,然后我们不创建事务,BaseDAO会这样做。 现在,由于我们要迁移到JPA,因此需要事务性的持久化调用。因此,我在类级别的@Transactional上添加了BaseDAO,当我添加它时,该应用程序可以正常工作,但其中的功能需要大量交互DB在那儿,它变慢了。有一份报告以前需要1分钟,而现在需要1.4分钟。

休眠模板方法

public class BaseDAO extends HibernateDaoSupport {

public List executeQueryPaging(final String hql, final Object[] params, final Integer[] pagingParam) {
        List results = null;
        results = getHibernateTemplate().executeFind(new HibernateCallback() {

            public Object doInHibernate(Session session) {
                Query query = session.createQuery(hql);

                if (params != null) {
                    for (int i = 0; i < params.length; i++) {
                        query.setParameter(i, params[i]);
                    }
                }
                query.setFirstResult(pagingParam[0]);
                query.setMaxResults(pagingParam[1]);

                return query.list();
            }
        });
        return results;
    }
}

JPA方法

@Transactional
public class BaseDAO {

public List executeQueryPaging(final String hql, final Object[] params, final Integer[] pagingParam) {
        Query query = entityManager.createQuery(hql);
        List list = null;

        if (params != null) {
            for (int i = 0; i < params.length; i++) {
                query.setParameter(i + 1, params[i]);
            }
        }
        if (pagingParam != null) {
            query.setFirstResult(pagingParam[0]);
            query.setMaxResults(pagingParam[1]);
        }
        list = (List) query.getResultList();
        return list;
    }
}

0 个答案:

没有答案