я получаю исключение javax.persistence.PersistenceException: org.hibernate.SessionException: сеанс закрывается в операторе возврата, я использую Spring JPA.
StringBuilder queryBuilder = new StringBuilder(querystat);
System.out.println("startDate--->" + startDate);
Query query =
getEntityManager().createQuery(queryBuilder.toString());
System.out.println("query.list();--->"
+ query.getResultList().size());
return query.getResultList();
у кого-нибудь есть идеи по этому вопросу?
Вы пытались использовать query.getResultList() в переменной локального списка?
Вероятно, вам не хватает аннотации @Transactional/настройки транзакций.
Прикрепите отладчик с beakpoint к исключению «javax.persistence.PersistenceException», а затем проверьте основную причину этого исключения.




Спасибо за ответы. Я добавил transactionTemplate в класс обслуживания, его работа. Ниже приведен рабочий код.
return transactionTemplate
.execute(new TransactionCallback<List<?>>() {
public List<?> doInTransaction(
TransactionStatus status) {
return dao.monthReportQuery(startDate, endDate);
}
});
Пожалуйста, взгляните на способ работы @Transactional. Это приводит к лучшему коду, чем использование TransactionalTemplate... Я бы не использовал шаблонный способ ведения дел (транзакции, но и другие), если иное невозможно.
Публичный метод, вызывающий код, должен быть аннотирован с помощью @транзакционный.
Далее необходимо активировать обработку @Transactional. Это может быть или не быть уже активным. Его можно активировать с помощью @EnableTransactionManagement.
Метод, помеченный @Transactional, не должен вызываться из того же класса.
Пожалуйста, поделитесь всем своим кодом.