【发布时间】:2012-11-08 13:58:53
【问题描述】:
我正在阅读一些带有Hibernate 的实体:
Criteria criteria = session.createCriteria(…);
List<Entity> list = (List<Entity>) criteria.list();
现在我正在遍历这个列表,并希望将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() 已正确添加。我做错了什么?
【问题讨论】:
标签: java multithreading spring hibernate spring-transactions