I'm using JPA 2.0 and trying to reproduce this query in hibernate, but I can not figure out how to do it.
I did in the language of Mysql
SELECT totalassociado,
totalcriticado,
items.item_codigo_item,
items.item_data_item,
items.item_descricao,
items.item_status,
items.empresa,
items.usuario_nome,
Associado.usuario_codigo,
items.usuario_codigo
FROM (SELECT Count(item.'codigo') AS TotalAssociado,
item.'codigo_item' AS item_codigo_item,
item.'data_item' AS item_data_item,
item.'descricao' AS item_descricao,
item.'status' AS item_status,
item.codigo_empresa,
usuario.'codigo' AS usuario_codigo,
usuario.'nome' AS usuario_nome,
usuario.'permissao' AS usuario_permissao,
tecnico_item.'codigo_tecnico' AS tecnico_item_codigo_tecnico,
tecnico_item.'codigo_item' AS tecnico_item_codigo_item
FROM 'item' item
INNER JOIN 'tecnico_item' tecnico_item
ON item.'codigo' = tecnico_item.'codigo_item'
INNER JOIN 'usuario' usuario
ON tecnico_item.'codigo_tecnico' = usuario.'codigo'
GROUP BY usuario.codigo,
item.codigo_empresa) AS Associado,
(SELECT Count(item.'codigo') AS TotalCriticado,
item.'codigo_item' AS item_codigo_item,
item.'data_item' AS item_data_item,
item.'descricao' AS item_descricao,
item.'status' AS item_status,
usuario.'codigo' AS usuario_codigo,
usuario.'nome' AS usuario_nome,
usuario.'permissao' AS usuario_permissao,
tecnico_item.'codigo_tecnico' AS tecnico_item_codigo_tecnico,
tecnico_item.'codigo_item' AS tecnico_item_codigo_item
FROM 'item' item
JOIN 'tecnico_item' tecnico_item
ON item.'codigo' = tecnico_item.'codigo_item'
JOIN 'usuario' usuario
ON tecnico_item.'codigo_tecnico' = usuario.'codigo'
WHERE item.status = 'CRITICADO') AS Criticado,
(SELECT item.'codigo' AS item_codigo,
item.'codigo_item' AS item_codigo_item,
item.'data_item' AS item_data_item,
item.'descricao' AS item_descricao,
item.'status' AS item_status,
item.codigo_empresa AS Empresa,
usuario.'codigo' AS usuario_codigo,
usuario.'nome' AS usuario_nome,
usuario.'permissao' AS usuario_permissao,
tecnico_item.'codigo_tecnico' AS tecnico_item_codigo_tecnico,
tecnico_item.'codigo_item' AS tecnico_item_codigo_item
FROM 'item' item
JOIN 'tecnico_item' tecnico_item
ON item.'codigo' = tecnico_item.'codigo_item'
JOIN 'usuario' usuario
ON tecnico_item.'codigo_tecnico' = usuario.'codigo') AS items
WHERE Associado.usuario_codigo = items.usuario_codigo
Could anyone give an idea / help?
ainda não consegui fazer a complicação está justamente em passar para jpql ou hql na hora de utilizar a sintaxe comecei assim:Query query = manager
.createQuery(
"select m,d from (select m from Item m left join m.tecnicos t "
+ "where (m.status ='CRITICADO' or m.status ='JUSTIFICADO') and t.codigo=:codigo ) as m,"
+ "(select d from Item d join d.tecnicos t where t.codigo=:codigo) as d",
Object[].class).setParameter("codigo", 3L);
List<Object[]> items = query.getResultList();
System.out.println("---Impressão de Items----");
int i = 0;
for (Object[] item : items)
System.out.println(++i + " ITem : "
+ ((Item) item[0]).getDescricao() + "Quantidade ===> "
+ ((Item) item[1]).getDescricao());
}e recebi a mensagem:2014-03-21 11:46:25,161 ERROR [org.hibernate.hql.internal.ast.ErrorCounter] line 1:17: unexpected token: m
2014-03-21 11: 46: 25,162 ERROR [org.hibernate.hql.internal.ast.ErrorCounter] line 1:17: unexpected token: m line 1:17: unexpected token: m or (removing mapping m