事务注释比HibernateDAOSupport降低了性能

时间:2019-11-25 06:55:33

标签: spring

我正在用我的代码导出报告,我正在使用HibernateDAOSupport,并且该方法未使用@Transactional进行注释。因此,当请求来自UI时,将自动创建事务,并在2分钟内导出报告。 但是,当我尝试使用线程时,必须添加注释@Transactional,否则由于没有事务处理,因此我会收到LazyInitialization错误。 因此,当我放置@Transactional时,同一份报告将花费2.4分钟的时间。这个时间一直在增加,有时不用@Transactional会花费两倍的时间 我不确定为什么在放置注释@Transactional

时需要花费时间

主要类别: CommonDAO

public class CommonDAO extends HibernateDaoSupport
private HibernateTransactionManager txnManager;

    public void setTxnManager(HibernateTransactionManager txnManager) {
        this.txnManager = txnManager;
    }
public List executeSQLQueryPaging(final String hql,
            final Object[] params, final Integer[] pagingParam) throws ServiceException {
        List results = null;
        results = getHibernateTemplate().executeFind(new HibernateCallback() {

            public Object doInHibernate(Session session) {
                SQLQuery query = session.createSQLQuery(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;
    }

ModuleDAO扩展CommonDAO

public List getReportData{
executeSQLQueryPaging();
...
return list}

服务

public List getReportData(){
.....
return ModuleDAO.getReportData();
}

如果我将@Transactional放在服务层,则会降低性能,否则从Web执行时速度会更快。

0 个答案:

没有答案