Problemas com hql + jpa

2 respostas
Malachai

Pessoal,

Tenho um sistema com EJB3 + JPA + HIBERNATE e não estou conseguindo resolver um problema com os parametros das querys, esta igual aos tutoriais que encontrei por ai, o problema é o seguinte, se eu faço a seguinte query:

final String queryString = select usuario from Usuario usuario where login = joao’”;

Query query = entityManager.createQuery(queryString);

List<Usuario> lstUsuario = query.getResultList();

eu consigo receber o usuario joao sem problema, mas quando passo isso por parametro nao consigo receber o resultado da query

o codigo completo seria o seguinte:

String strWhere = “”;

try {
		
			final String queryString = "select usuario from Usuario usuario";
			
			if (usuario.getLogin() != null && !usuario.getLogin().equals("")){
				strWhere = (strWhere == "") ? " where " : strWhere + " and ";
				strWhere = strWhere + "login = ?";
			}
				
			if (usuario.getSenha() != null && !usuario.getSenha().equals("")){
				strWhere = (strWhere == "") ? " where " : strWhere + " and ";
				strWhere = strWhere + "senha = ?";
			}
				
			Query query = entityManager.createQuery(queryString + strWhere);
			
			if (usuario.getLogin() != null && !usuario.getLogin().equals("")){
				query.setParameter(1, usuario.getLogin());
			}
				
			if (usuario.getSenha() != null && !usuario.getSenha().equals("")){
				query.setParameter(2, usuario.getSenha());
			}
			
			List&lt;Usuario&gt; lstUsuario = query.getResultList();
			
			if (lstUsuario.size() &lt; 1) {
				return null;
			}else{
				return (Usuario) lstUsuario.get(0);
			}
			
			
		} catch (Exception e) {

inicialmente eu fiz usando o ":nomeparam", mas nao funcinou, entao coloquei como sempre usei e continuou sem retornar nem um resultado.

obs. o banco é o mysql

2 Respostas

Leozin

faça um log.info/println antes dessa linha

Query query = entityManager.createQuery(queryString + strWhere);

em outras palavras, faça assim:

System.out.println(queryString + strWhere);
Query query = entityManager.createQuery(queryString + strWhere);

e veja qual a query que ele monta

Malachai

Eu vi a query, estava correta, tanto que executei ela no banco e rodou sem problemas. Inclusive coloquei a propriedade show_sql do hibernate como true dentro do persistence.xml e ele gerou a query correta:

select usuario0_.pk_usuario as pk1_0_, usuario0_.status as status0_, usuario0_.login as login0_, usuario0_.senha as senha0_, usuario0_.nome as nome0_
from homecontrol.usuario usuario0_ where usuario0_.login=? and usuario0_.senha=?

so tive que substituir pelas ? e funcionou, nao sei o que possa esta acontecendo, será que tem a ver com o mySQL? mas ele tras os registros se coloco eles fixos no where

Criado 8 de janeiro de 2008
Ultima resposta 8 de jan. de 2008
Respostas 2
Participantes 2