Query HQL que gere is null ao invés de = null

0 respostas
wescleyfcosta

Olá,

Como vocês fazem quando em um HQL tem alguma propriedade que tem valor null e que se o parâmetro usado no HQL for null ele saia no resultado? Exemplo o hql abaixo tem um proprieda chamada "apoliceSeguro" que pode ser null, acontece que nesse caso os registros não estão saindo
@NamedQuery(name = "ativo.selectAtivosByApolice", query = "FROM Ativo a left join fetch a.apoliceSeguro ap where a.situacaoAtivo = :situacaoAtivo and ap = :apoliceSeguro and a.unidadeEnsino = :unidadeEnsino  Order By a.dataAquisicao desc"),
Aparentemente na hora de converter o HQL para a query do mysql ele coloca campo = null e não campo is null e por isso acaba não saindo. Eu pesquisei e vi que tem gente que resolve isso com Criteria. Outra solução que encontrei na net, foi a de usar o método setParameter(String, Object, Type) ao invés setParameter(String, Object), o problema é que o Type eu usei StandardBasicTypes.INTEGER porém quando eu executo ele lança uma exceção org.hibernate.LazyInitializationException: could not initialize proxy - no Session Pelo que entendi, ele usa a sessão do hibernate para criar esse mapeamento, mas não consegui definir isso, a documentação fala a respeito de um TypeHelper para criar o mapeamento, mas não entendi bem. A solução que acabei usando por conta própria, foi ao invés de passar a entidade ApoliceSeguro, passar seu id na query, sendo que se o valor for null eu troco para zero e na query uso a função ifnull que muda o valor para zero tb e comparo, conforme exemplo abaixo
final Integer idApolice = (apoliceSeguro != null) ? apoliceSeguro.getId() : 0;
	Query query = getSession().getNamedQuery("ativo.selectAtivosByApolice");
	query.setInteger("apoliceSeguro", idApolice);
	query.setParameter("unidadeEnsino", unidadeEnsino);
	query.setParameter("situacaoAtivo", SituacaoAtivo.ATIVO);
	return query.list();
@NamedQuery(name = "ativo.selectAtivosByApolice", query = "FROM Ativo a left join fetch a.apoliceSeguro ap where a.situacaoAtivo = :situacaoAtivo and ifnull(ap.id,0) = :apoliceSeguro and a.unidadeEnsino = :unidadeEnsino  Order By a.dataAquisicao desc"),
Minha pergunta seria: Como vocês resolveriam isso? sds
Criado 5 de abril de 2011
Respostas 0
Participantes 1