Múltiplas colunas com o mesmo nome e query com SQL nativo

6 respostas
J

Galera,

Estou codificando uma integração entre dois sistemas e precisei usar uma query nativa do banco de dados do cliente pois ele usa features características do banco, o fiz através do método createNativeQuery da interface EntityManager de JPA. Nessa query eu possuo diversos joins e seleciono diversos campos, dentre os campos selecionados três deles se chamam “descricao”.

Aparentemente o JPA ou quem quer que esteja processando estes registros está atribuindo o valor do primeiro campo “descricao” para os demais, fazendo meus dados selecionados ficarem errados. E se eu tento qualifica-los colocando um nome qualquer após o nome da coluna ou usando o idioma “tabela.coluna as alias” ele diz não encontrar a coluna.

Alguém já passou por este problema?

6 Respostas

P

dependo do banco não precisa usar os as

faz select d.descricao, o.descricao, q.descricao from objeto d join d.outro o join o.qualquer q

qualquer coisa envia seu código

F

Estranho esse problema. Algumas sugestões:

  1. Verifique se você realmente está retornando colunas diferentes. Eu sei, isso é básico, mas às vezes a gente digita errado ou se confunde em algum momento e acaba não percebendo o erro;
  2. Se você executa a query diretamente no gerenciador de banco de dados o que acontece?
  3. Tente usar um DTO como

ou um Transformer como

O Transformer é particularmente interessante porque ele cria o objeto baseado nos aliases, então se você fizer algo como q.descricao as d1 e seu DTO tiver um atributo chamado d1 ele vai saber resolver…

Se nada te indicar o problema… Bom, você é religioso? Porque só rezando :smiley:

Edit 1: Tinha esquecido que o Transformer é específico do Hibernate, mas se não houver outra solução essa certamente funcionará…

W

Salve Salve Gujeiros

Estou com um intrigante questão aqui com meus codigos Tambem
Gostaria de uma opinião de como eu poderia resgatar do ResultSet essa consulta.
Minha Base de Dados tem uma tabela entrega que possui um dupla ocorrencia da chave estrangeira da tabela endereco (codEnderecoBuscar,CodEnderecolevar),
A grade questao depois de eu resgatar por meio do join repete-se os nomes dos campos, sera que existe uma maneira de controlar qual e o primeiro endereco e o segundo para eu poder colocalos nos objetos respectivos…

segue meu select

s[b]elect * from Entrega ent
inner join Cliente cli on ent.codCliente = cli.codCliente

inner join Endereco end   on ent.codEnderecoBuscar = end.codEndereco

                                     inner join Bairro bai on end.codBairro = bai.codBairro

                                               inner join Endereco end2 on ent.codEnderecoLevar = end2.codEndereco

                                                           inner join Bairro bai2 on end2.codBairro = bai2.codBairro

                             where codEntrega=28;[/b]

Ou como eu posso renomear os campos da segunda ocorrecia da tabela endereco e bairro …!

P

Não faças SELECT *

Deves fazer SELECT apenas dos campos que necessitas. E aí ja podes dar os alias para os campos da tabela endereço

select ent.campo1, ent.campo2, ......

end.morada as morada1, end2.morada as morada2

from Entrega ent

inner join Cliente cli on ent.codCliente = cli.codCliente

inner join Endereco end on ent.codEnderecoBuscar = end.codEndereco

inner join Bairro bai on end.codBairro = bai.codBairro

inner join Endereco end2 on ent.codEnderecoLevar = end2.codEndereco

inner join Bairro bai2 on end2.codBairro = bai2.codBairro

where codEntrega=28;
W

[quote] [color=red]Valeu muito obrigado pelo ajuda, deu certo.Salve Salve… Bom fim de semana para todos![/color]

W

[quote=webdiferente]

Salve Salve! Gujeiros, Em primeiro lugar gostaria reinterar meus agradecimentos a este forum exepcional, pela sua gama de material de qualidade inquestionavel, com um suporte para desenvolvedores de qualquer seguimento java*.
Atualmente estou com, dificuldades em poder filtrar no Mysql ou Java (Ainda na dúvida) domingos em um Insert
A questão é : ao fechar um contrato de serviço de entregas o cliente fará, por exemplo um contrato de 30 dias; terei de agendar as entregas, porem sem inserir domingos, acredito sim, que tem algo que possa faser para filtrar tal opção, se alguem puder me dar uma ajudinha ficaria grato!
Não esquecendo…Muito obrigado ai pmlm

Criado 30 de maio de 2011
Ultima resposta 9 de jan. de 2012
Respostas 6
Participantes 5