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);
}
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
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 é
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…