Consulta banco de dados, cláusula WHERE não funciona

Boa noite amigos,

Minha cláusula WHERE escrita da seguinte forma não está funcionando:

  public List<Renda> retornaListaRenda(String idUsuarioSession){
		
		StringBuffer hql = new StringBuffer();

		hql.append("select r FROM Renda r ");
		hql.append("JOIN Usuario u ");
		hql.append("WHERE u.cpf = :idUsuario ");

		List<Renda> rendas = em.createQuery(hql.toString()).setParameter("idUsuario", idUsuarioSession).getResultList();
		
		return rendas;
		
		}

Até ai tudo bem, ele me traz os resultados do banco de dados, porém, ele não está filtrando pela cláusula WHERE, no caso, o “CPF”, então está me trazendo todas as rendas cadastradas, inclusive as de outros “CPFs” (Outros usuários).

Ja debuguei o código e comprovei que ele recebe o CPF da variável: idUsuarioSession .

Alguma sugestão?

Estou convencido qud esse teu join tem algo faltando.

Nao era pra ser inner join não? Da uma lida na documentação do hql sobre join

1 curtida

Olá @peczenyj

Já havia tentado com INNER JOIN, porém deu a mesma coisa… ele me trouxe TODAS as informaçoes da table, ignorando o WHERE.

ok mas pra fazer um join vc tem que especificar, se nao me engano, o mapping das entidades ou especificiar como vc quer fazer o join no HQL

https://docs.jboss.org/hibernate/orm/3.3/reference/pt-BR/html/queryhql.html#queryhql-joins

A tua entidade Renda deve ter um atributo do tipo Usuario e ai deves fazer

select r FROM Renda r INNER JOIN r.usuario u where ...
1 curtida

Olá peczebyj,

Em pesquisas anteriores já havia encontrado essa documentação, segui alguns exemplos do site porém sem sucesso.

@pmlm

Tenho uma coluna USUARIO_CPF na minha tabela Renda, como ficaria o restante do código?

tentei da seguinte maneira:

            hql.append("select d from Despesa d ");
	hql.append("JOIN Usuario u ");
	hql.append("WHERE u.cpf = :idUsuario ");

	Query query = em.createQuery(hql.toString());

	query.setParameter("idUsuario", idUsuarioSession);

Porém sem sucesso… ele traz todas as informações ignorando o Where…

descreve as tabelas Despesa e Usuario.

1 curtida

Segue:

RENDA:

USUARIO:

Observação: A coluna USUARIO_CPF é uma FK mapeada em meu código com @ManyToOne e @OneToMany.

Olá amigos, consegui resolver…

O problema era no mapeamento de r.Usuario … eu estava utilizando o “U” maiúsculo… troquei para minúsculo e funcionou!.

Obrigado.