java - Hibernate: LazyInitializationException: 延迟初始化角色集合失败。无法初始化代理 - 没有 session

标签 java spring hibernate jpa spring-transactions

我有下一个错误:nested exception is org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.example.Model.entities, could not initialize proxy - no Session

我的模型实体:

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); 行遇到异常,当我调用 getEntities() 时也会发生同样的异常model 上。 我检查了事务管理器,它配置正确,并且在这一步存在事务。我还检查了有关与此异常相关的 stackoverflow 的大量答案,但没有任何用处。

可能是什么原因造成的?

最佳答案

看起来模型是一个分离的实体。

尝试合并并在合并实例上执行操作:

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

    mergedModel.addEntity(createEntity());
    ...
}

关于java - Hibernate: LazyInitializationException: 延迟初始化角色集合失败。无法初始化代理 - 没有 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42925823/

相关文章:

java - 如果 hashCode() 没有被覆盖,对象的哈希码是什么?

java - 如何解释 Objectify save() 中的返回值

java - 如何在不破坏gradle的情况下更新外部jar文件?

Spring RequestMapping 头痛

java - 当对集合进行 get 调用时,Hibernate 会删除延迟加载的多对多集合

java - Struts + Spring + Hibernate 集成

hibernate Postgresql 模式

java - 生成固定长度的随机数组

java - 给定列表 1、4、5、9、2 编写一个程序来查找两个值的可能组合,其中 sum = 6

java - Hibernate用俄语创建记录显示为问号mysql