Транзакционная аннотация замедляет производительность после внедрения jpa - PullRequest
0 голосов
/ 08 июля 2019

Я обновляю свое приложение, в настоящее время оно использует Hibernate 3 и теперь переходит на jpa-hibernate 4. У нас есть один служебный класс BaseDAO, который используется для всех операций, связанных с базой данных, таких как executeQuery, executeUpdate и всех,Сеанс также управляется только там.В настоящее время, когда мы используем методы get для отображения данных или одну операцию обновления / создания / удаления, тогда мы не создаем транзакции, это делает BaseDAO.Теперь, когда мы мигрируем в JPA, нам нужен транзакционный вызов сохраняемого вызова. Итак, я добавил @Transactional на BaseDAO на уровне класса, и когда я его добавляю, приложение работает нормально, но с функциональностью, где было много взаимодействия с БДэто замедлилось.Есть один отчет, который раньше занимал 1 минуту, а теперь он занимает 1,4 минуты.

Метод шаблона Hibernate

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...