当前位置: 首页 > 知识库问答 >
问题:

Hibernate:LazyInitializationException:未能懒惰地初始化角色集合。无法初始化代理-没有会话

孔弘盛
2023-03-14

我有下一个错误:嵌套异常是org.hibernate.lazyInitializationException:未能懒洋洋地初始化Role:com.example.model.Entities的集合,无法初始化代理-没有会话

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的答案,但没有任何有用的。

它的原因是什么?

共有1个答案

简俊楚
2023-03-14

模型似乎是一个独立的实体。

尝试合并并对合并实例执行操作:

@Override
public void process(Model model) {
     ...
    Model mergedModel = session.merge(model);

    mergedModel.addEntity(createEntity());
    ...
}
 类似资料: