我的服务有问题: DAO:
public Oficina find(String codigoDir3) {
try{
// crear la query
CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
CriteriaQuery<Oficina> cq = cb.createQuery(Oficina.class);
// configurar la query
Root<Oficina> from = cq.from(Oficina.class);
cq.where(cb.equal(from.get("codigo"), codigoDir3));
cq.orderBy(cb.asc(from.get("codigo")));
// obtener los datos
TypedQuery<Oficina> ctq = getEntityManager().createQuery(cq);
Oficina oficina = ctq.getSingleResult();
return oficina;
}catch(Exception ex){
LOGGER.error("Clase: OficinaJpaDao, Metodo: find(" + codigoDir3 + "), Error:" + ex.getMessage() + " " + ex.getCause() );
return null;
}
}
使用@Service和@Transactional
进行服务@Override
public List<UnidadOrganicaDTO> getUnidadesOrganicas(String filtro){
List<UnidadOrganica> unidadesOrganicas = new ArrayList<UnidadOrganica>();
List<UnidadOrganicaDTO> unidadesOrganicasDto = new ArrayList<UnidadOrganicaDTO>();
try{
unidadesOrganicas = unidadOrganicaDao.findAll(filtro);
for(UnidadOrganica uo: unidadesOrganicas){
unidadesOrganicasDto.add(utils.uoentityToDto(uo));
}
}catch(Exception ex){
log.error("AMAPDir3ServiceImpl.getUnidadesOrganicas("+filtro+"): " + ex.getMessage());
}
return unidadesOrganicasDto;
}
RESTFUL
@GET
@Produces("application/json")
@Path("/getOficina/{codigoDir3}")
public String getOficina(
@HeaderParam("Authorization") String authorization,
@PathParam("codigoDir3") @DefaultValue("") String codigoDir3) {
String jsonString;
try{
jsonString = toJSON(servicio.getOficina(codigoDir3));
AuditarServicio(authorization,"AMAPGENERICOS.getOficina");
}catch(Exception ex){
// registrar el error y devolver vacio
logger.error("Dir3RestfulImpl.getOficina("+codigoDir3+"): " + ex.getLocalizedMessage());
jsonString = JSON_EMPTY;
}
return jsonString;
}
实体Oficina拥有@ManyToOne的属性(fetch = FetchType.LAZY) 并在applicationContext:
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
当我进行咨询时,服务部署购买,它返回错误无法初始化代理 - 没有会话(通过参考链: 谢谢你的帮助
ERROR [Dir3RestfulImpl] Dir3RestfulImpl.getOficina(): could not initialize proxy - no Session (through reference chain: es.gobcantabria.amap.dir3.servidor.business.dto.OficinaDTO["ccaa"]->es.gobcantabria.amap.dir3.servidor.business.domain.Ccaa_$$_jvstba4_c["codIne"])
答案 0 :(得分:0)
异常来自哪里?你可以发布堆栈跟踪吗?
也许您正在从REST层访问一个惰性属性,该属性因事务(和Hibernate会话)被提交/关闭而失败。
对持久性实体的任何访问都应该从服务层进行(这意味着,初始化延迟集合)。 REST层应仅适用于已分离的实体,每个数据都已加载。