我在我的项目中使用 Spring + JPA + Hibernate。项目结构如下: - DAO 层 - 负责获取数据。DAO 以模型对象的形式返回数据。- 服务层 - 调用 DAO 并以 UI 所需的形式处理/转换(模型)数据。
我将@Transactional 用于服务层上的方法。
我面临的问题是,有时在从延迟加载的集合中读取数据时出现“会话已关闭”错误。我也没有一直面临这个问题。从 TestNG 测试运行时以及将应用程序部署为 WAR 时,有时会出现此错误。
我正在粘贴运行 TestNG 测试时遇到的异常:
org.hibernate.SessionException:会话已关闭!在 org.hibernate.impl.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:72) 在 org.hibernate.impl.SessionImpl.getBatcher(SessionImpl.java:305) 在 org.hibernate.loader.Loader.doQuery(Loader.java:854 ) 在 org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274) 在 org.hibernate.loader.Loader.loadEntity(Loader.java:2037) 在 org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader. java:86) at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:76) at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3268) at org.hibernate.event.def .DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:496) 在 org.hibernate.event.def。
这是我第一个使用 Spring/JPA/Hibernate 的项目。我无法找出可能导致此问题的原因?还有什么可以解决这个问题?
如果需要更多信息,请告诉我。任何帮助/指针都非常感谢:)