【发布时间】:2011-02-28 18:02:49
【问题描述】:
应用基于 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: Session is closed!。避免这种情况的最简单方法是使用 @Transactional(readOnly = true) 标记 findByUserId 方法。但据我了解,事务管理应该是服务层的职责,以避免不必要的事务创建。所以,我的问题是:我怎样才能正确地摆脱 SessionException?
【问题讨论】:
标签: java hibernate spring jpa transactions