Como fazer um cast em um object

8 respostas
M

Pessoal,

Na minha query a baixo, o retorno dela esta sendo uma lista de objects, como eu faço para que me retorne uma lista de PerfilBiometrico? Ou então depois que ele me retornar a lista de objects como eu faço para fazer um cast para PerfilBiometrico?

public List<PerfilBiometrico> ListPerfilBiometrico(Cliente cliente)
			throws Exception {
		// TODO Auto-generated method stub
		List<PerfilBiometrico> perfisBiometricos = null;
		StringBuffer sb = new StringBuffer();
		sb
				.append("select pb.ic_dedoausente,pb.nu_qualidadetemplate,pb.bi_template,pb.co_cliente_fk,pb.co_tipodedo_fk ");
		sb.append("from siabmtb003_perfilbiometrico as pb, ");
		sb
				.append("siabmtb001_cliente as c where pb.co_cliente_fk = c.co_cliente_pk ");
		sb.append("AND c.co_nis = :nis");

		this.query = this.entityManager.createNativeQuery(sb.toString());
		this.query.setParameter("nis", cliente.getNis());
		try {
			perfisBiometricos = this.query.getResultList();
			System.out.println(perfisBiometricos);
		} catch (Exception e) {
			// TODO: handle exception
			e.getStackTrace();
			this.logger.warning("Perfil n�o encontrado");
		}		
		
		return perfisBiometricos;
	}

8 Respostas

fabiozoroastro

Altere a projeção da sua HQL para:

sb.append( "select new PerfilBiometrico (");
sb.append( " pb.ic_dedoausente");
sb.append( " ,pb.nu_qualidadetemplate");
sb.append( " ,pb.bi_template");
sb.append( " ,pb.co_cliente_fk");
sb.append( " ,pb.co_tipodedo_fk");
sb.append( " )");
// continua seu codigo

E adicione um construtor na classe PerfilBiometrico para receber esses parâmetros.
Dessa forma você receberá uma lista de PerfilBiometrico.

Até!

Ramundodavy

Seguinte:

Query query = em.createNativeQuery(sql, PerfilBiometrico.class);

Detalhe, os campos do seu select deverá ter a mesma ordem dos atributos de PerfilBiometrico.java. Dessa forma vc terá um select Nativo convertido para uma lista de Objetos Especifico.

Do jeito que o amigo acima falou também funciona, mas voce teria que criar um construtor na sua entidade com todos os campos da sua classe.

ViniGodoy

Só um outro detalhe, que não tem muito a ver com a dúvida.

É recomendável usar StringBuilder no lugar do StringBuffer. O StringBuilder não é sincronizado, o que pode gerar uma performance melhor.

Quando você tiver só strings estáticas, você pode usar concatenação pura e simples:

String sql = "select pb.ic_dedoausente,pb.nu_qualidadetemplate,pb.bi_template,pb.co_cliente_fk,pb.co_tipodedo_fk " + "from siabmtb003_perfilbiometrico as pb, " + "siabmtb001_cliente as c where pb.co_cliente_fk = c.co_cliente_pk " + "AND c.co_nis = :nis";

M

Tentei tudo q vcs falaram ai…um não dá certo o outro continua dando o mesmo erro e fabiozoroastro, o pb que vc coloca no seu exemplo vem de onde?
tem algo mais que posso tentar? Ah…estou usando JPA.
desde já obrigado pela ajuda!

M

o que estou tentando entender também e não consegui ainda é o porque de quando eu faço:

this.query = this.entityManager.createQuery("FROM PerfilBiometrico");

essa query me retorna null, sendo que no banco existe dados na tabela PerfilBiometrico

alguém sabe o pq?

fabiozoroastro

Uai, [b]pb[/n] é o alias da sua tabela que você mesmo definiu. :slight_smile:

Se a hql “from PerfilBiometrico” não está trazendo nada(E realmente existem registros), pode ser algum problema com a sua fábrica. =)

Dê uma olhada aí nas configurações.

M

Pessoal fiz diferente e pelo que realmente eu preciso essa forma fica certa…só que tem um problema, ela está me retornando uma lista de objects, como eu faria para ela me trazer uma lista do que eu realmente eu preciso?

List<PerfilBiometrico> perfilBiometrico = null;
		String sql = "select max (pb.nu_qualidadetemplate), "+
			"pb.co_tipodedo_fk from siabmtb003_perfilbiometrico as pb, "+
			"siabmtb001_cliente as c where c.co_nis = :nis AND pb.co_cliente_fk = c.co_cliente_pk "+
			"group by (pb.co_tipodedo_fk);";
		this.query = this.entityManager.createNativeQuery(sql);
		this.query.setParameter("nis", cliente.getNis());
		try {
			
			//this.query.setMaxResults(1);
		perfilBiometrico = this.query.getResultList();
		} catch (Exception e) {
			// TODO: handle exception
		}
tiagomm

Companheiro,

Envie por favor o mapeamento da classe PerfilBiometrico assim como seu persistence.xml para melhorar a analise.

Obrigado

Criado 5 de abril de 2010
Ultima resposta 6 de abr. de 2010
Respostas 8
Participantes 5