package gcom.cadastro.unidade; import gcom.atendimentopublico.registroatendimento.AtendimentoRelacaoTipo; import gcom.atendimentopublico.registroatendimento.RegistroAtendimento; import gcom.util.ControladorException; import gcom.util.ErroRepositorioException; import gcom.util.HibernateUtil; import gcom.util.Util; import gcom.util.filtro.ComparacaoTexto; import gcom.util.filtro.ComparacaoTextoCompleto; import gcom.util.filtro.FiltroParametro; import gcom.util.filtro.ParametroSimples; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.Iterator; import org.hibernate.Hibernate; import org.hibernate.HibernateException; import org.hibernate.Session; public class RepositorioUnidadeHBM implements IRepositorioUnidade { private static IRepositorioUnidade instancia; /** * Construtor da classe RepositorioAcessoHBM */ private RepositorioUnidadeHBM() { } /** * Retorna o valor de instancia * * @return O valor de instancia */ public static IRepositorioUnidade getInstancia() { if (instancia == null) { instancia = new RepositorioUnidadeHBM(); } return instancia; } /** * [UC0366] Inserir Registro de Atendimento * * Obt�m a unidade associada ao usu�rio que estiver efetuando o registro de atendimento * (UNID_ID e UNID_DSUNIDADE da tabela UNIDADE_ORGANIZACIONAL com * UNID_ID=(UNID_ID da tabela USUARIO com USUR_NMLOGIN= * Login do usu�rio que estiver efetuando o registro de atendimento) e UNID_ICABERTURARA=1) * * @author Raphael Rossiter * @date 25/07/2006 * * @param login * @return UnidadeOrganizacional * @throws ErroRepositorioException */ public UnidadeOrganizacional obterUnidadeOrganizacionalAberturaRAAtivoUsuario(String loginUsuario) throws ErroRepositorioException { UnidadeOrganizacional retorno = null; Session session = HibernateUtil.getSession(); String consulta = ""; try { consulta = "SELECT usua.unidadeOrganizacional " + "FROM Usuario usua " + "INNER JOIN usua.unidadeOrganizacional unid " + "LEFT JOIN FETCH unid.meioSolicitacao meso " + "WHERE usua.login = :loginUsuario AND unid.indicadorAberturaRa = 1 "; retorno = (UnidadeOrganizacional) session.createQuery(consulta).setString("loginUsuario", loginUsuario).setMaxResults(1).uniqueResult(); /*if (retorno != null){ Hibernate.initialize(retorno.getMeioSolicitacao()); }*/ } catch (HibernateException e) { throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { HibernateUtil.closeSession(session); } return retorno; } /** * [UC0406] Filtrar Registro de Atendimento * * @author Leonardo Regis * @date 05/08/2006 * * @param unidadeOrganizacional * @return Collection<UnidadeOrganizacional> unidades subordinadas * @throws ErroRepositorioException */ public Collection<UnidadeOrganizacional> recuperarUnidadesSubordinadasPorUnidadeSuperior(UnidadeOrganizacional unidadeOrganizacional) throws ErroRepositorioException { Collection<UnidadeOrganizacional> retorno = new ArrayList(); Collection<Integer> retornoConsulta = new ArrayList(); Session session = HibernateUtil.getSession(); String consulta = ""; try { consulta = "SELECT uo.id " + "FROM gcom.cadastro.unidade.UnidadeOrganizacional uo " + "WHERE uo.unidadeSuperior.id = :idUnidadeOrganizacional"; retornoConsulta = session.createQuery(consulta). setInteger("idUnidadeOrganizacional", unidadeOrganizacional.getId()).list(); if (retornoConsulta.size() > 0) { retorno = new ArrayList(); UnidadeOrganizacional unid = null; for (Iterator iter = retornoConsulta.iterator(); iter.hasNext();) { Integer element = (Integer) iter.next(); unid = new UnidadeOrganizacional(); unid.setId(element); retorno.add(unid); } } } catch (HibernateException e) { e.printStackTrace(); throw new ErroRepositorioException("Erro no Hibernate"); } finally { HibernateUtil.closeSession(session); } return retorno; } /** * [UC0406] Filtrar Registro de Atendimento * * [FS007] Verificar exist�ncia de unidades subordinadas * * @author Leonardo Regis * @date 05/08/2006 * * @param unidadeOrganizacional * @return qtde unidades subordinadas * @throws ErroRepositorioException */ public int consultarTotalUnidadesSubordinadasPorUnidadeSuperior(UnidadeOrganizacional unidadeOrganizacional) throws ErroRepositorioException { Session session = HibernateUtil.getSession(); String consulta = ""; try { consulta = "SELECT count(*) " + "FROM gcom.cadastro.unidade.UnidadeOrganizacional uo " + "WHERE uo.unidadeSuperior.id = :idUnidadeOrganizacional"; return (Integer)session.createQuery(consulta). setInteger("idUnidadeOrganizacional", unidadeOrganizacional.getId()). setMaxResults(1). uniqueResult(); } catch (HibernateException e) { e.printStackTrace(); throw new ErroRepositorioException("Erro no Hibernate"); } finally { HibernateUtil.closeSession(session); } } /** * [UC0406] Filtrar Registro de Atendimento * * Caso exista registro de atendimento que est�o na unidade atual informada * (existe ocorr�ncia na tabela REGISTRO_ATENDIMENTO com TRAMITE=Id da Unidade Atual * e maior TRAM_TMTRAMITE) * * @author Leonardo Regis * @date 07/08/2006 * * @param unidadeOrganizacional * @return RegistroAtendimento * @throws ControladorException */ public UnidadeOrganizacional recuperaUnidadeAtualPorRA(RegistroAtendimento registroAtendimento) throws ErroRepositorioException { UnidadeOrganizacional retorno = null; Object[] retornoConsulta = null; Session session = HibernateUtil.getSession(); String consulta = ""; try { consulta = "SELECT unid.id, unid.descricao, max(tram.dataTramite) " + "FROM Tramite tram " + "INNER JOIN tram.registroAtendimento rgat " + "INNER JOIN tram.unidadeOrganizacionalDestino unid " + "WHERE rgat.id = :idRA " + "GROUP BY unid.id, unid.descricao"; retornoConsulta = (Object[])session.createQuery(consulta).setInteger("idRA", registroAtendimento.getId()).setMaxResults(1).uniqueResult(); if (retornoConsulta != null) { retorno = new UnidadeOrganizacional(); retorno.setId((Integer)retornoConsulta[0]); retorno.setDescricao((String)retornoConsulta[1]); } } catch (HibernateException e) { throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { HibernateUtil.closeSession(session); } return retorno; } /** * [UC0426] Reativar Registro de Atendimento * * Caso a unidade destino informada n�o possa receber registros de * atendimento (UNID_ICTRAMITE=2 na tabela UNIDADE_ORGANIZACIONAL com * UNID_ID=Id da unidade destino informada). * * [FS0013] - Verificar possibilidade de encaminhamento para a unidade * destino * * @author Ana Maria * @date 03/09/2006 * * @return idUnidadeDestino * @throws ErroRepositorioException */ public Short verificaTramiteUnidade(Integer idUnidadeDestino) throws ErroRepositorioException { Short retorno = null; Session session = HibernateUtil.getSession(); String consulta = ""; try { consulta = " select unid.indicadorTramite" + " from UnidadeOrganizacional unid" + " where unid.id = :idUnidadeDestino "; retorno = (Short) session.createQuery(consulta) .setInteger("idUnidadeDestino", idUnidadeDestino) .setMaxResults(1).uniqueResult(); } catch (HibernateException e) { throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { HibernateUtil.closeSession(session); } return retorno; } /** * [UC0456] Elaborar Roteiro de Programa��o de Ordens de Servi�o * * @author Rafael Pinto * @date 04/09/2006 */ public Collection<UnidadeOrganizacional> pesquisarUnidadeOrganizacionalPorRA(Collection<Integer> idsRa) throws ErroRepositorioException { Collection<Object[]> retornoConsulta = null; Collection<UnidadeOrganizacional> retorno = new ArrayList(); Session session = HibernateUtil.getSession(); String consulta = ""; try { consulta = "SELECT DISTINCT unidade.unid_id as idUnidade,unidade.unid_dsunidade as descUnidade " + "FROM cadastro.unidade_organizacional unidade, " + "atendimentopublico.ra_unidade raUnidade, " + "atendimentopublico.ordem_servico os " + "where os.rgat_id in (:idsRa) " + "and os.orse_cdsituacao in (1,3) " + "and raUnidade.rgat_id = os.rgat_id " + "and raUnidade.attp_id = :idAtendimentoTipo " + "and unidade.unid_id = raUnidade.unid_id"; retornoConsulta = session.createSQLQuery(consulta). addScalar("idUnidade",Hibernate.INTEGER). addScalar("descUnidade",Hibernate.STRING). setParameterList("idsRa", idsRa). setInteger("idAtendimentoTipo",AtendimentoRelacaoTipo.ABRIR_REGISTRAR).list(); if (retornoConsulta.size() > 0) { retorno = new ArrayList(); UnidadeOrganizacional unidade = null; for (Iterator iter = retornoConsulta.iterator(); iter.hasNext();) { Object[] element = (Object[]) iter.next(); unidade = new UnidadeOrganizacional(); unidade.setId((Integer) element[0]); unidade.setDescricao((String) element[1]); retorno.add(unidade); } } } catch (HibernateException e) { throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { HibernateUtil.closeSession(session); } return retorno; } /** * [UC0456] Elaborar Roteiro de Programa��o de Ordens de Servi�o * * @author Rafael Pinto,Vivianne Sousa * @date 04/09/2006,13/06/2008 */ public Collection<UnidadeOrganizacional> pesquisarUnidadeOrganizacionalPorUnidade(Integer unidadeLotacao) throws ErroRepositorioException { Collection<UnidadeOrganizacional> retornoConsulta = new ArrayList(); Session session = HibernateUtil.getSession(); String consulta = ""; try { // consulta = "SELECT DISTINCT unid " // + "FROM OrdemServicoUnidade osUnidade " // + "INNER JOIN osUnidade.atendimentoRelacaoTipo art " // + "INNER JOIN osUnidade.ordemServico os " // + "INNER JOIN osUnidade.unidadeOrganizacional unid " // + "LEFT JOIN os.registroAtendimento ra " // + "WHERE ra IS NULL " // + "AND os.situacao in (1,3) " // + "AND unid.id = :unidadeLotacao " // + "AND art.id = :idAtendimentoTipo "; // inclus�o da coluna unidade atual nas tabelas REGISTRO_ATENDIMENTO e ORDEM_SERVICO // Vivianne Sousa 13/06/2008 analista:F�tima Sampaio consulta = "SELECT DISTINCT unid " + "FROM OrdemServico os " + "INNER JOIN os.unidadeAtual unid " + "LEFT JOIN os.registroAtendimento ra " + "WHERE ra IS NULL " + "AND os.situacao in (1,3) " + "AND unid.id = :unidadeLotacao "; retornoConsulta = session.createQuery(consulta). setInteger("unidadeLotacao", unidadeLotacao). list(); } catch (HibernateException e) { throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { HibernateUtil.closeSession(session); } return retornoConsulta; } /** * Pesquisa a Unidade Organizacional do Usu�rio Logado * * @author Rafael Corr�a * @date 25/09/2006 * * @param id * @return UnidadeOrganizacional * @throws ErroRepositorioException */ public UnidadeOrganizacional pesquisarUnidadeUsuario(Integer idUsuario) throws ErroRepositorioException { UnidadeOrganizacional retorno = null; Session session = HibernateUtil.getSession(); String consulta = ""; try { consulta = "SELECT usua.unidadeOrganizacional " + "FROM Usuario usua " + "WHERE usua.id = :idUsuario"; retorno = (UnidadeOrganizacional) session.createQuery(consulta).setInteger("idUsuario", idUsuario.intValue()).setMaxResults(1).uniqueResult(); } catch (HibernateException e) { throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { HibernateUtil.closeSession(session); } return retorno; } /** * [UC0375] Manter Unidade Organizacional * * @author Ana Maria * @date 24/11/2006 * * @param unidadeOrganizacional * @throws ErroRepositorioException */ public void atualizarUnidadeOrganizacional(UnidadeOrganizacional unidadeOrganizacional) throws ErroRepositorioException { Session session = HibernateUtil.getSession(); String update; Integer unidadeSuperior = null; if(unidadeOrganizacional.getUnidadeSuperior() != null){ unidadeSuperior = unidadeOrganizacional.getUnidadeSuperior().getId().intValue(); } Integer unidCentralizadora = null; if(unidadeOrganizacional.getUnidadeCentralizadora() != null){ unidCentralizadora = unidadeOrganizacional.getUnidadeCentralizadora().getId().intValue(); } String sigla = null; if(unidadeOrganizacional.getSigla() != null){ sigla = unidadeOrganizacional.getSigla(); } try { update = " update gcom.cadastro.unidade.UnidadeOrganizacional" + " set unid_idsuperior = "+unidadeSuperior + " ,unid_idcentralizadora = " + unidCentralizadora + " ,unid_icesgoto = :unidaEsgoto,unid_ictramite = :unidTramite, unid_dsunidade = :descricao" + " ,unid_dssiglaunidade = '" + sigla +"'" + ",empr_id = :idEmpresa, meso_id = :idMeioSolicitacao" + " ,untp_id = :idTipoUnidade, unid_icabertura = :unidAbertura, unid_icuso = :indicadorUso," + " unid_tmultimaalteracao = :datahoracorrente"; if (unidadeOrganizacional.getUnidadeRepavimentadora() != null && unidadeOrganizacional.getUnidadeRepavimentadora().getId() != null){ update += ", unid_idrepavimentadora = " + unidadeOrganizacional.getUnidadeRepavimentadora().getId().toString() + " where unid_id = :id "; } update += " where unid_id = :id "; session.createQuery(update).setInteger("unidaEsgoto", unidadeOrganizacional.getIndicadorEsgoto()) .setInteger("unidTramite", unidadeOrganizacional.getIndicadorTramite()) .setString("descricao", unidadeOrganizacional.getDescricao()) .setInteger("idEmpresa", unidadeOrganizacional.getEmpresa().getId().intValue()) .setInteger("idMeioSolicitacao", unidadeOrganizacional.getMeioSolicitacao().getId().intValue()).setInteger("idTipoUnidade", unidadeOrganizacional.getUnidadeTipo().getId().intValue()) .setInteger("unidAbertura", unidadeOrganizacional.getIndicadorAberturaRa()) .setInteger("indicadorUso", unidadeOrganizacional.getIndicadorUso()) .setDate("datahoracorrente", new Date()).setInteger("id", unidadeOrganizacional.getId()).executeUpdate(); } catch (HibernateException e) { e.printStackTrace(); throw new ErroRepositorioException("Erro no Hibernate"); } finally { HibernateUtil.closeSession(session); // session.close(); } } /** * Verificar se a unidade organizacional est� associada * a uma divis�o de esgoto * * @author Ana Maria * @date 27/11/2006 * * @param idUnidade * @return String * @throws ErroRepositorioException */ public String verificarUnidadeEsgoto(Integer idUnidade) throws ErroRepositorioException { String retorno = null; Session session = HibernateUtil.getSession(); String consulta = ""; try { consulta = " select div.descricao" + " from DivisaoEsgoto div" + " inner join div.unidadeOrganizacional unid" + " where unid.id = :idUnidade"; retorno = (String) session.createQuery(consulta).setInteger("idUnidade", idUnidade.intValue()).setMaxResults(1).uniqueResult(); } catch (HibernateException e) { throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { HibernateUtil.closeSession(session); } return retorno; } /** * Verificar se a unidade organizacional est� associada * a uma especifica��o de solicita��o * * @author Ana Maria * @date 28/11/2006 * * @param idUnidade * @return String * @throws ErroRepositorioException */ public String verificarUnidadeTramitacao(Integer idUnidade) throws ErroRepositorioException { String retorno = null; Session session = HibernateUtil.getSession(); String consulta = ""; try { consulta = " select step.descricao" + " from SolicitacaoTipoEspecificacao step" + " inner join step.unidadeOrganizacional unid" + " where unid.id = :idUnidade"; retorno = (String) session.createQuery(consulta).setInteger("idUnidade", idUnidade.intValue()).setMaxResults(1).uniqueResult(); } catch (HibernateException e) { throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { HibernateUtil.closeSession(session); } return retorno; } /** * Pesquisar unidade organizacional * * @author Ana Maria * @date 28/11/2006 * * @param idUnidade * @return String * @throws ErroRepositorioException */ public UnidadeOrganizacional pesquisarUnidadeOrganizacional(Integer idUnidade) throws ErroRepositorioException { UnidadeOrganizacional retorno = null; Session session = HibernateUtil.getSession(); String consulta = ""; try { consulta = " select unid" + " from UnidadeOrganizacional unid" + " inner join fetch unid.empresa empr" + " left join fetch unid.localidade loca" + " inner join fetch unid.unidadeTipo untp" + " left join fetch unid.meioSolicitacao meio" + " left join fetch unid.gerenciaRegional gere" + " left join fetch unid.unidadeCentralizadora unce" + " left join fetch unid.unidadeSuperior unsup" + " where unid.id = :idUnidade"; retorno = (UnidadeOrganizacional) session.createQuery(consulta).setInteger("idUnidade", idUnidade.intValue()).setMaxResults(1).uniqueResult(); } catch (HibernateException e) { throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { HibernateUtil.closeSession(session); } return retorno; } /** * [UC0374] Filtrar Unidade Organizacional * * Pesquisa as unidades organizacionais com os condicionais informados * filtroUnidadeOrganizacional * * @author Ana Maria * @date 30/11/2006 * * @param filtro * @return Collection */ public Collection pesquisarUnidadeOrganizacionalFiltro(FiltroUnidadeOrganizacional filtroUnidadeOrganizacional, Integer numeroPagina) throws ErroRepositorioException{ Session session = HibernateUtil.getSession(); Collection retorno = null; Collection unidadeOrganizacionalParametros = filtroUnidadeOrganizacional .getParametros(); try{ String sql = ""; sql = " select unid.id," + " unid.unidadeTipo.descricao, " + " unid.unidadeTipo.nivel," + " unid.descricao, " + " unid.indicadorAberturaRa, " + " unid.indicadorTramite" + " from UnidadeOrganizacional unid" + " where "; Iterator iteratorUnidadeOrganizacional = unidadeOrganizacionalParametros.iterator(); while (iteratorUnidadeOrganizacional.hasNext()) { FiltroParametro filtroParametro = (FiltroParametro) iteratorUnidadeOrganizacional .next(); if (filtroParametro instanceof ParametroSimples) { ParametroSimples parametroSimples = ((ParametroSimples) filtroParametro); sql = sql + "unid." +parametroSimples.getNomeAtributo() + " = " + parametroSimples.getValor() + " and "; } if (filtroParametro instanceof ComparacaoTexto) { ComparacaoTexto parametroSimples = ((ComparacaoTexto) filtroParametro); sql = sql + "unid." +parametroSimples.getNomeAtributo() + " like '" + parametroSimples.getValor()+ "' and "; } if (filtroParametro instanceof ComparacaoTextoCompleto) { ComparacaoTextoCompleto parametroSimples = ((ComparacaoTextoCompleto) filtroParametro); sql = sql + "unid." +parametroSimples.getNomeAtributo() + " like '" + parametroSimples.getValor()+ "' and "; } } sql = Util.removerUltimosCaracteres(sql, 4); //Ordena��o de dados if(filtroUnidadeOrganizacional.getCamposOrderBy() != null && filtroUnidadeOrganizacional.getCamposOrderBy().size() > 0){ Iterator iteOrderBy = filtroUnidadeOrganizacional.getCamposOrderBy().iterator(); while (iteOrderBy.hasNext()){ sql = sql + "order by unid."+iteOrderBy.next(); } } retorno = (Collection)session.createQuery(sql) .setFirstResult(10 * numeroPagina).setMaxResults(10) .list(); } catch (HibernateException e) { // levanta a exce��o para a pr�xima camada throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { // fecha a sess�o HibernateUtil.closeSession(session); } return retorno; } public Integer pesquisarUnidadeOrganizacionalFiltroCount(FiltroUnidadeOrganizacional filtroUnidadeOrganizacional) throws ErroRepositorioException{ Session session = HibernateUtil.getSession(); Integer retorno = null; Collection unidadeOrganizacionalParametros = filtroUnidadeOrganizacional .getParametros(); try{ String sql = ""; sql = " select count(unid.id)" + " from UnidadeOrganizacional unid" + " where "; Iterator iteratorUnidadeOrganizacional = unidadeOrganizacionalParametros.iterator(); while (iteratorUnidadeOrganizacional.hasNext()) { FiltroParametro filtroParametro = (FiltroParametro) iteratorUnidadeOrganizacional .next(); if (filtroParametro instanceof ParametroSimples) { ParametroSimples parametroSimples = ((ParametroSimples) filtroParametro); sql = sql + "unid." +parametroSimples.getNomeAtributo() + " = " + parametroSimples.getValor() + " and "; } if (filtroParametro instanceof ComparacaoTexto) { ComparacaoTexto parametroSimples = ((ComparacaoTexto) filtroParametro); sql = sql + "unid." +parametroSimples.getNomeAtributo() + " like '" + parametroSimples.getValor()+ " %' and "; } if (filtroParametro instanceof ComparacaoTextoCompleto) { ComparacaoTextoCompleto parametroSimples = ((ComparacaoTextoCompleto) filtroParametro); sql = sql + "unid." +parametroSimples.getNomeAtributo() + " like '" + parametroSimples.getValor()+ " ' and "; } } sql = Util.removerUltimosCaracteres(sql, 4); System.out.println(sql); retorno = (Integer)session.createQuery(sql).uniqueResult(); } catch (HibernateException e) { // levanta a exce��o para a pr�xima camada throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { // fecha a sess�o HibernateUtil.closeSession(session); } return retorno; } /** * Pesquisar unidade organizacional por localidade * * @author S�vio Luiz * @date 03/01/2007 * * @param idUnidade * @return String * @throws ErroRepositorioException */ public UnidadeOrganizacional pesquisarUnidadeOrganizacionalLocalidade(Integer idLocalidade) throws ErroRepositorioException { UnidadeOrganizacional retorno = null; Session session = HibernateUtil.getSession(); String consulta = ""; try { consulta = " select unid" + " from UnidadeOrganizacional unid" + " left join fetch unid.localidade loca" + " where loca.id = :idLocalidade"; retorno = (UnidadeOrganizacional) session.createQuery(consulta).setInteger("idLocalidade", idLocalidade).setMaxResults(1).uniqueResult(); } catch (HibernateException e) { throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { HibernateUtil.closeSession(session); } return retorno; } /** * Pesquisa o id da unidade negocio para a qual a localidade pertence. * * [UC0267] Encerrar Arrecada��o do M�s * * @author Raphael Rossiter * @date 30/05/2007 * * @param idLocalidade * @throws ErroRepositorioException */ public Integer pesquisarIdUnidadeNegocioParaLocalidade(Integer idLocalidade) throws ErroRepositorioException { Integer retorno = null; Session session = HibernateUtil.getSession(); String consulta = ""; try { consulta = "select uneg.id from Localidade loca " + "left join loca.unidadeNegocio uneg " + "where loca.id = :idLocalidade"; retorno = (Integer) session.createQuery(consulta).setInteger("idLocalidade", idLocalidade).uniqueResult(); } catch (HibernateException e) { throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { HibernateUtil.closeSession(session); } return retorno; } /** * [UC0869] Gerar Arquivo Texto das Contas em Cobran�a por Empresa * * @author Mariana Victor * @date 14/04/2011 */ public UnidadeOrganizacional pesquisarUnidadeOrganizacionalPorImovel(Integer idImovel) throws ErroRepositorioException { Object retornoConsulta = null; UnidadeOrganizacional retorno = new UnidadeOrganizacional(); Session session = HibernateUtil.getSession(); String consulta = ""; try { consulta = " SELECT unidade.unid_id as idUnidade " + " FROM cadastro.unidade_organizacional unidade " + " INNER JOIN cadastro.localidade localidade ON localidade.loca_id = unidade.loca_id " + " INNER JOIN cadastro.imovel imovel ON imovel.loca_id = localidade.loca_id " + " WHERE imovel.imov_id = :idImovel "; retornoConsulta = session.createSQLQuery(consulta). addScalar("idUnidade",Hibernate.INTEGER). setInteger("idImovel",idImovel) .setMaxResults(1).uniqueResult(); if (retornoConsulta != null) { retorno = new UnidadeOrganizacional(); retorno.setId((Integer) retornoConsulta); } } catch (HibernateException e) { throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { HibernateUtil.closeSession(session); } return retorno; } }