Gostaria de saber se, É possível instanciar dinâmicamente uma UNION no meio de uma query?
Gostaria de passar este código SQL para o hibernate para usar O/R
select
gpf_tmp_imp_manifesto.id_tmp_manifesto,
gpf_und_carga_manif.id_unidade_carga,
gpf_unidade_carga.nr_cnpj_remetente,
contribuintes.nm_razao_social
from
gpf_tmp_imp_manifesto,
gpf_und_carga_manif,
gpf_unidade_carga,
(select nr_cnpj, nm_razao_social from vw_gaf_pessoa_juridica
union
select nr_cnpj, nm_correto as nm_razao_social from gpf_tmp_transportador)
contribuintes
where
gpf_tmp_imp_manifesto.id_tmp_manifesto = gpf_und_carga_manif.id_tmp_manifesto
and
gpf_und_carga_manif.id_unidade_carga = gpf_unidade_carga.id_unidade_carga
and
gpf_unidade_carga.nr_cnpj_remetente = contribuintes.nr_cnpj(+) order by gpf_unidade_carga.id_unidade_carga;
Tentei fazer desta maneira
select
manifesto.idManifestoAquaviario,
unidadeCargaManifesto.unidadeCarga,
unidadeCarga.nuCnpjRemetente,
contribuintes.razaoSocial,
from
ManifestoAquaviario manifesto,
UnidadeCargaManifesto unidadeCargaManifesto,
UnidadeCarga unidadeCarga,
(select pessoa.nrCnpj as CNPJ, pessoa.nmRazaoSocial as NOME from ViewPessoa pessoa
union
select transportador.nrCnpj as CNPJ, transportador.nmCorreto as NOME from TmpTransportador transportador)
contribuintes
where
manifesto.idManifestoAquaviario = unidadeCargaManifesto.manifestoAquaviario
and
unidadeCargaManifesto.unidadeCarga = unidadeCarga.idUnidadeCarga
and
unidadeCarga.nuCnpjRemetente = contribuintes.CNPJ;
Não consigo instanciar a Union como “contribuintes”, sei que posso declara na execução do código um objeto auxiliar somente para receber esta coleção, mas a dúvida que fica é “Tem como fazer isso direto na query???”
Uma segunda tentativa foi instanciando dinamicamente:
select
manifesto.idManifestoAquaviario,
unidadeCargaManifesto.unidadeCarga,
unidadeCarga.nuCnpjRemetente,
contribuintes.razaoSocial,
from
ManifestoAquaviario manifesto,
UnidadeCargaManifesto unidadeCargaManifesto,
UnidadeCarga unidadeCarga,
new contribuintes(select pessoa.nrCnpj as CNPJ, pessoa.nmRazaoSocial as NOME from ViewPessoa pessoa union select transportador.nrCnpj as CNPJ, transportador.nmCorreto as NOME from TmpTransportador transportador)
where
manifesto.idManifestoAquaviario = unidadeCargaManifesto.manifestoAquaviario
and
unidadeCargaManifesto.unidadeCarga = unidadeCarga.idUnidadeCarga
and
unidadeCarga.nuCnpjRemetente = contribuintes.CNPJ
…Mas também dá erro.
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: from near line 6, column 1 [select
manifesto.idManifestoAquaviario …
OBS: todos os mapeamentos estão corretos pois fiz…
select pessoa.nrCnpj, pessoa.nmRazaoSocial from ViewPessoa pessoa
union
select transportador.nrCnpj, transportador.nmCorreto from TmpTransportador transportador
…por fora e funciona normal e a isntrução sql traz os dados que preciso normalmente.
Agradeço se alguém puder colaborar