Prezados,
Estou precisando do seguinte:
select new Produto (t.id, t.codigo, t.descricao,
t.grupoProduto.descricao, um.abreviacao, tp.descricao, om.codigo, st.codigo)
from Produto t
left join t.unidadeMedida as um
left join t.tipoProduto as tp
left join t.produtoEmpLazy as pe
left join pe.origemMercadoria as om
left join pe.situacaoTributaria as st
controlerHQL.WHERE + " order by t.descricao
O left join em destaque acima eu precisa que tivesse uma clausa-la condicional
algo assim: left join t.produtoEmpLazy as pe on pe.empresa = :empresa
So que isso noa funciona no hibernate. Sabem como podsso fazer isso?
O resultado final teria que ser: left outer join tipoproduto t on t.empresa = 1
[]'s
Vc estah confundindo as coisas, cláusula condicional eh WHERE, LIMIT, entre outos. entao para fazer um filtro vc precisa compara-lo numa cláusula WHERE ex:
WHERE pe.empresa = :empresa
O ‘ON’ eh um operador que trabalha em conjunto com as operações de junção de tabela. Se eu não me engano na hql nem precisa usá-lo ela jah faz isso internamente.
vc precisa usar @SecondayTables
para definir as tabelas secundarias de seu objeto…
…
de uma olhada nessa anotação, la tem tudo q vc precisa, pra fazer a ligação antre sua tabela principal e a secundaria…
Obrigado pela dica.
Ja descobri a solução
posso usar a seguinte sintaxe left join tipoProduto as tp with tp.empresa.id = :idEmpresa
[]'s Miguel 
[quote=Marcos Alexandre Miguel]Obrigado pela dica.
Ja descobri a solução
posso usar a seguinte sintaxe left join tipoProduto as tp with tp.empresa.id = :idEmpresa
[]'s Miguel 
[/quote]
so que dessa forma como vc ta fazendo, vc ta deixando de fazer OO, e o bom do hibernate, é esquecer esse HQL e esse SQL
se seu objeto produto ja estiver mapeado… e vc so quiser motnar a pesquisa… fica bem facill
public List<Produtos> findByEmpresa(Empresa empresa,Session session) {
return session.createCriteria()
.forClass(Produto.class)
.add(Restrictions.eq("produtoEmpLazy", empresa))
.list();
}
ai vc pode usar em outro lugar assim
Session session = getSession();
List<Produto> produtos = findByEmpresa(minhaEmpresa, session);
Obrigado a todos pela prontidão.
Consegui resolver o problema.
[]'s Miguel
Existe alguma outra forma de obter o mesmo resutlado, usando DetachedCriteria ou Criteria porem sem usar o @SecondaryTables ???
Estou com esse mesmo problema
DetachedCriteria criteria = DetachedCriteria.forClass(Remessa.class,"Remessa");
criteria.createAlias("Remessa.repasses", "Repasses",CriteriaSpecification.LEFT_JOIN);
criteria.add(Restrictions.eq("Remessa.id", idRemessa));
criteria.getExecutableCriteria(hibernateSession).uniqueResult();
Precisaria de adicionar um and Remessa.situacao <> ‘E’ no left outer join
alguma ideia??