Consulta usando Hibernate

9 respostas
T

Amigos quero fazer uma busca em uma tabela no banco que tem apenas uma coluna com alguns caracteres

estou usando hibernate como posso fazer para ter um select como esse no hibernate select coluna from nomeTabela

segue meu metodo de exemplo

public String consultarColuna() throws Exception {
		
		String resultado;
		StringBuffer hql = new StringBuffer();
		hql.append(" select nomeDaTabela ");
		hql.append(" from   meu.pacote.aplicacao.persistencia.minhaClasse as nomeDaTabela");
		
		Query query = getSession().createQuery(hql.toString());						
		resultado = (String) query.uniqueResult(); 

		return resultado;

	}

esse meu metodo da java.lang.ClassCastException nessa linha aqui resultado = (String) query.uniqueResult();

o que eu devo alterar para evitar esse ClassCast ?

9 Respostas

T

Para obter o objeto pode ser feito assim

Query q = entityManager.createQuery("select u from User u where u.name = :name ");
		q.setParameter("name", name);
		User p = (Project) q.getSingleResult();

tambem da para fazer assim :

String query = "SELECT "
	+ "  u.nome  "
	+ " FROM Usuario u "
	+ " where u.id= :id ";
Query q = entityManager.createNativeQuery(query);
q.setParameter("id", id);
Object[] o = (Object[]) q.getSingleResult();
String nomeUsuario = (String) o[0];
T

tiozao_bp como eu coloco esse seu primeiro exemplo no meu metodo que postei,

porque na busca que quero fazer não irei passar nenhuma parametro como e apenas uma coluna com o registro

não vai ficar um select pesado um select como esse select coluna from tabela

e isso aqui seria a entidade que eu mapeei no arquivo do hibernate ?

entityManager

T

Acredito que ficaria algo assim:

try {
	Query q = entityManager.createQuery(" select c from minhaClasse c ");
	List<minhaClasse> resposta = q.getResultList();
	return resposta;
} catch (RuntimeException e) {
	throw e;
}

se vc quer uma lista de seu modelo deve ter o retorno do metodo como “List”
se vc quer uma lista de um campo especifico faz assim:

Query q = entityManager.createNativeQuery("select c.campo from minhaClasse c ");
	List<Object[]> resp = q.getResultList();
	List<String> lista = new ArrayList<String>();
	for(Object[] o : resp ){
		lista.add((String) o[0]);
	}

mesmo assim o retorno do metodo tem que ser um List

N

1. public String consultarColuna() throws Exception { 2. 3. String resultado; 4. StringBuffer hql = new StringBuffer(); 5. hql.append(" select nomeDaTabela.coluna "); 6. hql.append(" from meu.pacote.aplicacao.persistencia.minhaClasse as nomeDaTabela"); 7. 8. Query query = getSession().createQuery(hql.toString()); 9. resultado = (String) query.uniqueResult(); 10. 11. return resultado; 12. 13. }

Leve em consideração que sua entidade representa a tabela, e os atributos da sua entidade as colunas da tabela,
se você quer pegar só uma coluna de sua entidade/tabela deve especificar isso. como esta sendo feito na linha 5

N

é, isso aí que o tiozao falou. :wink:

T

então neno quanto a isso que vc falou blz

queria saber qual a modificação que eu devo fazer no meu metodo em cima do exemplo do tiozao

T

Feras eu alterei o metodo de acordo com o que o tiozao mostro no exemplo dele mais o eclipse esta reclamando disso entityManager

o que e ?

try {  
			        Query q = entityManager.createQuery(" select coluna from minhaClasse coluna ");  
			        Object resposta = q.uniqueResult();  
			        return (String) resposta;  
			    } catch (RuntimeException e) {  
			        throw e;  
			    }
N

thiago, entity manager é uma outra forma de persistência, tiozao colocou como um exemplo, no seu caso vc esta usando hibernate, então voce troca ele pelo getSession mesmo…

L

será que ajuda?
http://blog.camilolopes.com.br/busca-com-hibernate-annotation-jsf/

vc precisa ver o que o metodo ta retornando, vc ta fazendo um cast ali para String, a excecao que foi lancada é quando vc nao pode fazer a conversao de uma coisa pra outra.

Agora o entityManager é outra historia, que nao está relacionado ao HQL.

Criado 18 de novembro de 2010
Ultima resposta 19 de nov. de 2010
Respostas 9
Participantes 4