Приложение основано на Spring 2.5.5 и Hibernate 3.2.0 GA.
У меня есть следующий метод в моем DAO, который подключает MessageEntities к указанному пользователю:
public MessageEntity findByUserId(int userId) {
List<MessageEntity> result = (List<MessageEntity>) em.createNamedQuery(MessageEntity.Q_BY_USER_ID).setParameter("userId", userId).getResultList();
if (!result.isEmpty()) {
return result.get(0);
} else {
return null;
}
}
Мне нужно вызвать этот метод из моего интеграционного теста, чтобы проверить правильность поведения системы. Пока этот метод не транзакционный, я получаю только org.hibernate.SessionException: Сессия закрыта! . Самый простой способ избежать этого - пометить метод findByUserId с помощью @ Transactional (readOnly = true) . Но, как я понимаю, управление транзакциями должно быть обязанностью уровня обслуживания, чтобы избежать ненужного создания транзакций. Итак, мой вопрос: как мне правильно уйти от SessionException ?