我遇到了这个错误:nested exception is org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.example.Model.entities, could not initialize proxy - no Session
我的Model
实体:
class Model {
...
@OneToMany(fetch = FetchType.LAZY, mappedBy = "model", orphanRemoval = true)
@Cascade(CascadeType.ALL)
@Fetch(value = FetchMode.SUBSELECT)
public Set<Entity> getEntities() {
return entities;
}
public void addEntity(Entity entity) {
entity.setModel(this);
entities.add(entity);
}
}
而我有一个服务类:
@Service
@Transactional
class ServiceImpl implements Service {
@Override
public void process(Model model) {
...
model.addEntity(createEntity());
...
}
}
我正在从另一个服务方法调用服务:
@Override
@JmsListener(destination = "listener")
public void handle(final Message message) throws Exception {
Model model = modelService.getById(message.getModelId());
serviceImpl.process(model);
modelService.update(model);
}
但是当我试图调用这个方法时,在entities.add(entity);
一行上出现了异常,当我在model
上调用getEntities()
时也会发生相同的异常。我已经检查了事务管理器并且它已经正确地配置了,而且在这个步骤上存在事务。我还检查了与这个异常有关的大量stackoverflow答案,但没有什么有用的。
可能会导致这种情况的原因是什么?