无法初始化代理 - 没有会话

时间:2016-06-03 12:24:03

标签: spring maven

我的服务有问题: 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"])

1 个答案:

答案 0 :(得分:0)

异常来自哪里?你可以发布堆栈跟踪吗?

也许您正在从REST层访问一个惰性属性,该属性因事务(和Hibernate会话)被提交/关闭而失败。

对持久性实体的任何访问都应该从服务层进行(这意味着,初始化延迟集合)。 REST层应仅适用于已分离的实体,每个数据都已加载。