我正在用我的代码导出报告,我正在使用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执行时速度会更快。