Olá pessoal!
Estou utilizando JPA com Hibernate e estou com uma dificuldade para trazer os dados de duas tabelas, fiz as annotation certinho, mas não rolou! Podereiam me dar uma ajuda?
Segue o problema e os códigos…
O que eu tenho dentro das minhas tabelas:
Tabela1.id Tabela1.nome
------------- ----------------
0000001 Empresa A
0000002 Empresa B
Tabela2.id Tabela2.cnpj
------------- --------------------
0000001 12345678000001
0000001 12345678000002
0000001 12345678000003
0000002 12345678000004
0000002 12345678000005
0000002 12345678000006
SQL que o JPA gera:
SELECT Tabela1.id, Tabela1.nome, Tabela2.cnpj FROM Tabela1, Tabela2 WHERE (Tabela1.id=Tabela2.id) AND (SUBSTR(Tabela2.cnpj, 1 , 8) = SUBSTR('12345678' , 1 , 8));
Quando executo o SQL no banco, os dados saem assim:
Tabela1.id Tabela1.nome Tabela2.cnpj
----------- ---------------- ---------------
0000001 Empresa A 12345678000001
0000001 Empresa A 12345678000002
0000001 Empresa A 12345678000003
0000002 Empresa B 12345678000004
0000002 Empresa B 12345678000005
0000002 Empresa B 12345678000006
O problema, acredito estar neste trecho de código.
innerJoin = "FROM Tabela1 c, Tabela2 t WHERE c.id = t.id AND SUBSTR(c.cnpj, 1, 8) = SUBSTR(" + cnpjFilter + ", 1, 8)";
Query query = (Query) em.createQuery(innerJoin);
Iterator i = query.getResultList().iterator();
while (i.hasNext()) {
Object[] pair = (Object[]) i.next();
Tabela1 tabela1 = (Tabela1) pair[0];
Tabela2 tabela2 = (Tabela2) pair[1];
........
Pois a saída é essa:
Tabela1.id Tabela1.nome Tabela2.cnpj
----------- ---------------- ---------------
0000001 Empresa A 12345678000001
0000001 Empresa A 12345678000001
0000001 Empresa A 12345678000001
0000002 Empresa B 12345678000004
0000002 Empresa B 12345678000004
0000002 Empresa B 12345678000004
Reparem, que ele não retornou corretamente os objetos do CNPJ…
Gostaria de uma ajuda…
Desde já agradeço!