我有一个错误:nested exception is org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.example.Model.entities, could not initialize proxy - no Session
Hibernate:LazyInitializationException:未能懒惰地初始化一个角色集合。无法初始化代理 - 没有会话
我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的答案。
可能是什么原因呢?
当你说“_transaction存在于这个step_”时,你的意思是说你已经检查过一个事务真的是开放的,就像使用http://stackoverflow.com/a/42584751/3517383? – gabrielgiussi
@gabrielgiussi是 –
实体是一个新对象吗?如果是这种情况,则必须先将实体对象保存在数据库中,然后才能将其添加到实体列表中。 – Dimitri