Problema com hibernate e firebird - gerando sql com a função cross
9 respostas
mateusviccari
Bom dia, estou fazendo essa pesquisa no hibernate:
Na classe Obra eu tenho uma instancia de cliente, e esse cliente tem uma variavel nomeDoCliente, eu queria pesquisar todas as obras que o nome do cliente fosse ‘x’.
Porém está me gerando esse erro:
O que eu acho que esta fazendo é usando alguma função com o nome cross mas o firebird nao tem nenhuma função com esse nome.
E o desgraçado do hibernate nao esta mostrando o sql que ele gera mesmo com a propriedade show_sql como true.
Alguem tem a solução desse problema?
Pessoal, testei aqui agora e se eu fizer assim funciona:
Mas gostaria que funcionasse do outro jeito…
O firebird que estou usando é a versão 1.5, sera que tem alguma coisa a ver?
R
rof20004
Quando se usa o like, o recomendado é usar o simbolo de porcentagem entre a string, como abaixo:
from Obra where cliente.nomeDoCliente like '%x%'
JeffersonFelix
Tente utilizar o operador inner join do HQL, talvez isso seja o problema. Do jeito que você está fazendo, acredito que o hibernate está tentando montar uma cross join ao invés de inner join.
from Obra as obra
inner join obra.cliente as cliente
where cliente.nomeDoCliente like 'x'
De qualquer forma, acho estranho o erro de SQL. O dialect do firebird foi configurado corretamente??
Sobre o problema em ver suas queries, você configurou o log4j??
mateusviccari
Não é isso, ja tentei com o % e da o mesmo erro.
mateusviccari
JeffersonFelix:
Tente utilizar o operador inner join do HQL, talvez isso seja o problema. Do jeito que você está fazendo, acredito que o hibernate está tentando montar uma cross join ao invés de inner join.
from Obra as obra
inner join obra.cliente as cliente
where cliente.nomeDoCliente like 'x'
De qualquer forma, acho estranho o erro de SQL. O dialect do firebird foi configurado corretamente??
Sobre o problema em ver suas queries, você configurou o log4j??
O estranho é que fui fazer um cross join direto no ibexpert que é o admin do firebird e la deu certo…
Como eu configuro o log4j? achei que era só adicionar a lib no projeto…
mateusviccari
fiz como voce falou usando o inner join e assim deu certo…
mas eu gostaria de fazer da forma padrão, ja que a ideia do hibernate é de simplificar o sql…
JeffersonFelix
mateusviccari:
fiz como voce falou usando o inner join e assim deu certo…
mas eu gostaria de fazer da forma padrão, ja que a ideia do hibernate é de simplificar o sql…
Sobre o log4j, para ele funcionar, você precisa criar o arquivo log4j.properties, colocá-lo no root de seu diretório src, e incluir nele algumas linhas para informar como deverá ser o formato de saída, para onde você quer sua saída (num arquivo, no System.out, etc).
Se você googlar lo4j.properties examples ou coisa assim, vai achar um monte de exemplos.
mateusviccari
ok consegui configurar desse jeito usando aquela sql que voce passou, porem tem o seguinte problema…
ao invés de ele me retornar somente a obra, ele retorna a obra e o cliente através de um Object[] de 2 posições…
Não tem como fazer pra ele me retornar somente o objeto? visto que o objetivo no meu caso de fazer um inner join seria so pra fazer um filtro pelo nome do cliente…
JeffersonFelix
mateusviccari:
ok consegui configurar desse jeito usando aquela sql que voce passou, porem tem o seguinte problema…
ao invés de ele me retornar somente a obra, ele retorna a obra e o cliente através de um Object[] de 2 posições…
Não tem como fazer pra ele me retornar somente o objeto? visto que o objetivo no meu caso de fazer um inner join seria so pra fazer um filtro pelo nome do cliente…
Faça assim:
select obra
from Obra as obra
inner join obra.cliente as cliente
where cliente.nomeDoCliente like 'x'