Hibernate:LazyInitializationException:延迟初始化角色集合失败。无法初始化代理 - 无会话
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role. Could not initialize proxy - no Session
我有下一个错误: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);
}
}
我有一项服务class:
@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()
时,也会发生相同的异常。
我已经检查了事务管理器,它配置正确,事务存在于这一步。我还检查了与此异常相关的 Whosebug 上的大量答案,但没有任何用处。
可能是什么原因造成的?
模型似乎是一个分离的实体。
尝试合并并在合并实例上执行操作:
@Override
public void process(Model model) {
...
Model mergedModel = session.merge(model);
mergedModel.addEntity(createEntity());
...
}
正如@Maciej Kowalski 在第一次 @Transactional
阅读我的 model
后提到的那样,它已经处于分离状态,并且调用从另一个 @Transactional
方法获取 entities
失败LazyInitializationException
.
我对服务进行了一些更改,以便在同一事务中从数据库中获取 model
:
@Service
@Transactional
class ServiceImpl implements Service {
@Override
public void process(long modelId) {
...
Model model = modelDao.get(modelId);
model.addEntity(createEntity());
...
}
}
现在一切正常。
我有下一个错误: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);
}
}
我有一项服务class:
@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()
时,也会发生相同的异常。
我已经检查了事务管理器,它配置正确,事务存在于这一步。我还检查了与此异常相关的 Whosebug 上的大量答案,但没有任何用处。
可能是什么原因造成的?
模型似乎是一个分离的实体。
尝试合并并在合并实例上执行操作:
@Override
public void process(Model model) {
...
Model mergedModel = session.merge(model);
mergedModel.addEntity(createEntity());
...
}
正如@Maciej Kowalski 在第一次 @Transactional
阅读我的 model
后提到的那样,它已经处于分离状态,并且调用从另一个 @Transactional
方法获取 entities
失败LazyInitializationException
.
我对服务进行了一些更改,以便在同一事务中从数据库中获取 model
:
@Service
@Transactional
class ServiceImpl implements Service {
@Override
public void process(long modelId) {
...
Model model = modelDao.get(modelId);
model.addEntity(createEntity());
...
}
}
现在一切正常。