Consulta com parâmetros dinâmicos no JPA/Hibernate

Galera,como ficaria umaa consulta desse tipo usando JPA/Hibernate?

String sql = "select * from xpto where 1=1";

if(parametro1!=null){
sql.append(" and parametro1="+parametro1);
}
if(parametro2!=null){
sql.append(" and parametro2="+parametro2);
}

Amigo,

SQLs nativos do servidor de banco de dados que estás utilizando podem ser executados via JPA. Basta usar o método createNativeQuery de uma instância de EntityManager.

Att,

[quote=RicardoTerzella]Amigo,

SQLs nativos do servidor de banco de dados que estás utilizando podem ser executados via JPA. Basta usar o método createNativeQuery de uma instância de EntityManager.

Att,[/quote]

Isso eu sei,minha dúvida é com relação a montar a query com os parâmetros passados dinamicamente :smiley:

Resolvi mas ficou bem feinho,qual a melhor forma de fazer?

public static void main(String[] args) {
		Pessoa x = new Pessoa();
		x.setDataNascimento("07");
		x.setNome("R");
		
		
		for(Pessoa p : retornaResultado(x)){
			System.out.println(p.getNome());
		}
		
	}
	
	public static List<Pessoa> retornaResultado(Pessoa p){
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("pu");
		EntityManager em = emf.createEntityManager();
		Session session = (Session)em.getDelegate();
		StringBuffer query = new StringBuffer("select p.* from tb_pessoa p where 1=1");
		if(p.getDataNascimento()!=null){
			query.append(" and substr(datanascimento,4)='"+p.getDataNascimento()+"'");
		}
		if(p.getNome()!=null){
			query.append(" and nome like '%"+p.getNome()+"%'");
		
		}
		Query q = em.createNativeQuery(query.toString(),Pessoa.class);
		return q.getResultList();
		
	}

Em algum projeto de exemplo do Vraptor vi uma forma mais elegante de fazer isso mas n to conseguindo lembrar onde é :cry:

A forma que vc esta fazendo a hql esta correta, só altere o String por StringBuffer

StringBuffer sql = new StringBuffer();
sql.append("select * from xpto where 1=1")
   
if(parametro1!=null){  
sql.append(" and parametro1="+parametro1);  
}  
if(parametro2!=null){  
sql.append(" and parametro2="+parametro2);  
} 

Query query = entityManager().createQuery(sql.toString());
                           
objetoRetorno = query.getSingleResult(); | query.getResultList(); //retorna um objeto | uma lista

Valeu…