我正在升级我的应用程序,当前它正在使用Hibernate 3,现在正在迁移到jpa-hibernate 4。
我们有一个实用程序类BaseDAO
,用于所有与数据库相关的操作,例如executeQuery
,executeUpdate
等。会话也仅在此进行管理。
当前,我们在使用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;
}
}