我正在处理一个问题,即在实体传递给{{1}后,我尝试在EntityManager.refresh
/ JPA
映射Hibernate
上Entity
managed bean
}}。在托管bean中,我在refreshEntity
中调用方法EJB
,但我得到了
java.lang.IllegalArgumentException: Entity not managed
这不应该是这种情况,因为实际上应该管理实体,因为我刚刚通过JPA将它加载到EJB中:
public List<Entity> loadEntities(Parent _parent) {
List<Entity> result = null;
Query query = this.entMngr.createNamedQuery("Entity.getAllForParent");
query.setParameter("parent", _parent);
try {
result = (List<Entity>)query.getResultList();
} catch (NoResultException e) {
}
return result;
}
在托管bean中调用该方法:
private void refreshEntityList() {
this.entityList = this.mngrBean.loadEntities(this.parent);
}
但是,只要任何实体从EJB传递到托管bean,它就会停止管理,我知道它,因为我在EJB中创建了以下方法:
public void refreshEntity(Entity entity) {
this.entMngr.refresh(entity);
}
通过抛出上述异常从托管bean调用时失败。在进一步的调试中,我尝试在返回之前从循环中的refreshEntity
调用loadEntities
(仅用于测试,没有功能值):
for(Entity item : result) {
this.refreshAppeal(item);
}
哪个有效。但是,在托管bean的refreshEntityList
之后立即执行相同的操作会导致错误。
实体在从EJB到托管bean的过程中会发生什么变化才能停止管理?