我正在使用Hibernate阅读一些实体:
Criteria criteria = session.createCriteria(…);
List<Entity> list = (List<Entity>) criteria.list();
现在我正在遍历这个列表,并希望将 a 中的每个对象发送Runnable
到Executor
. 因此,我使用RunnableBean
.
for (Entity entity : list) {
IRunnableBean runnableBean = (IRunnableBean)
applicationContext.getBean("myRunnableBean", IRunnableBean.class);
runnableBean.setEntity(entity);
executor.execute(runnableBean);
}
RunnableBean
看起来像这样:
RunnableBean implements IRunnableBean {
// Setter
@Transactional
void run() {
entity.getMyCollection();
}
}
当我访问该集合时,我得到一个org.hibernate.LazyInitializationException
( no session or session was closed
)。
在 Spring 的日志中,我看到run()
正确添加了事务方法。我究竟做错了什么?