[quote=winigma]Bom pq eu sempre terei requisicao, e as vezes cotacao,…
HQL nao tem todos os recursos de do SQL, se dar pra fazer em sql não é pra ser possível ser feito em hql?[/quote]
HQL tem sim todos os recursos de SQL, porém, é preciso entender que SQL e HQL são diferentes entre si.
Eu creio que, no teu caso, você está pensando estruturado demais.
Creio que isso resolve
String hql = "Select c.requisicao FROM Cotacao c WHERE c.requisicao.id IS NOT NULL";
Como eu sei que deve ser isso?
Simples, eu criei uma associação entre os dois, para testar e fiz a seguinte consulta
String hql = "Select c.requisicao FROM Cotacao c WHERE c.requisicao.id <> 2";
List<Requisicao> lista = session.createQuery(hql).list();
for(Requisicao rs : lista){
System.out.println(rs.getId() + " " + rs.getNumSequencia());
}
Quando executei, tive os seguintes resultados
select requisicao1_.id as id0_, requisicao1_.ANO_SEQ as ANO2_0_, requisicao1_.NUM_SEQ as NUM3_0_ from COTACAO cotacao0_ inner join REQUISICAO requisicao1_ on cotacao0_.ID_REQUISICAO=requisicao1_.id where cotacao0_.ID_REQUISICAO<>2
1 123
3 123
4 123
5 123
6 123
Se estiverem iguais a minha entidade, fiz o seguinte:
List<Requisicao> requisicoes = entityManager
.createQuery(
"Select c.requisicao FROM Cotacao c WHERE c.requisicao.id <> 2")
.getResultList();
// hql.append("left join Cotacao c where c.requisicao = re ");
return requisicoes;