SQL Nativo

Pessoal, primeira vez que estou utilizando sql nativo no hibernate. Gostaria de saber como faço para fazer um where utilizando o parametro que estou passando no método. Ex: where s.codigo = solicitacao;


public List<DeterminacaoVO> buscarDeterminacaoPorSolicitacao(
			Integer solicitacao) {

		StringBuilder sql = new StringBuilder();
		sql.append("select distinct d.codigo, d.descricao, ti.descricao, e.sigla, e.descricao from determinacao d inner join solicitacaodeterminacao sol on sol.id_determinacao = d.codigo inner join solicitacaodeanalise s on s.codigo = sol.solicitacao_codigo inner join amostra a on a.codigo = sol.id_amostra inner join tipodeterminacao ti on ti.codigo = d.tipoDeterminacao_codigo inner join determinacaoelemento det on det.id_determinacao = d.codigo inner join elemento e on e.codigo = det.id_elemento ");

		List<DeterminacaoVO> listaRetorno = new ArrayList<DeterminacaoVO>();

		try {

			Session session = HibernateUtil.getSessionFactory().openSession();

			SQLQuery query = session.createSQLQuery(sql.toString());
			
			List lista = query.list();

			for (Object obj : lista) {

				Object[] determinacoes = (Object[]) obj;

				DeterminacaoVO det = new DeterminacaoVO();

				det.setCodigo(determinacoes[0]);
				det.setDeterminacao(determinacoes[1]);
				det.setTipo(determinacoes[2]);
				det.setSigla(determinacoes[3]);
				det.setElemento(determinacoes[4]);

				listaRetorno.add(det);
			}

		} catch (Exception e) {
			e.printStackTrace();
		}

		return listaRetorno;
	}

Desde já agradeço galera.

O SQL é nativo do seu banco de dados e não do Hibernate.

Faça a query como se você fosse fazer direto no banco de dados, só isso.

Olá Hebert.

Já tentei, mas nesse caso esta dando erro pq ele não reconhece o parametro que estou passando como uma coluna da tabela quando coloco ele na string do sql. Pode me dizer como ficaria neste caso de modo que funcione?

Abraço.

Renan.

Nossa que mancada, consegui aqui…Ficou assim:


sql.append("select distinct d.codigo, d.descricao, ti.descricao, e.sigla, e.descricao from determinacao d inner join solicitacaodeterminacao sol on sol.id_determinacao = d.codigo inner join solicitacaodeanalise s on s.codigo = sol.solicitacao_codigo inner join amostra a on a.codigo = sol.id_amostra inner join tipodeterminacao ti on ti.codigo = d.tipoDeterminacao_codigo inner join determinacaoelemento det on det.id_determinacao = d.codigo inner join elemento e on e.codigo = det.id_elemento where s.codigo = " + solicitacao);

Beleza. Só tome cuidado que com esse tipo de query você está exposto para o ataque hacker chamado SQL Injection.

Como Helbert falou sobre os cuidados com injeção de código, melhor não fazer assim concatenando, use parâmetros no SQL setando com setParameter como neste exemplo: http://www.mkyong.com/hibernate/hibernate-native-sql-queries-examples/

[quote=javaflex]Como Helbert falou sobre os cuidados com injeção de código, melhor não fazer assim concatenando, use parâmetros no SQL setando com setParameter como neste exemplo: http://www.mkyong.com/hibernate/hibernate-native-sql-queries-examples/
[/quote]Aqui também fala! =P

JPA Consultas e Dicas