Utilizando Metodo Generico

2 respostas
standart

Olá pessoal, vi em muitos lugares o pessoal disponiblizando exemplos de DAOs Genericos, como estou estudando sobre o assunto, acabei pegando um desses exemplos, porém o metodo abaixo não estou sabendo como usa-lo de acordo com a sua proposta.

<a class="mention" href="/u/override">@Override</a>

public  List list(Class classCheck, String jpql, Objectparametros) throws RuntimeException {

EntityManager em = ManagerController.getInstance().getEntityManager();

EntityTransaction tx = em.getTransaction();

Query query = em.createQuery(jpql);

List retorno = null;

try{

for(int i = 0; i < parametros.length; i++){

query.setParameter(i+1, parametros[i]);

}

retorno = query.getResultList();

tx.commit();
}catch(PersistenceException ex){
		tx.rollback();
		ex.printStackTrace();
	}finally{
		em.close();
	}
	
	return retorno;
}

Precisava que alguem pudesse me dar um exemplo de uso desse metodo com envio de parametros. Eu consigo usar fazendo dessa forma:

List lista = serviceIp.list(Ip.class, “SELECT i FROM Ip i” );

Mas se tento passar paramentros para uma consulta do tipo

List lista = serviceIp.list(Ip.class, “SELECT i FROM Ip i WHERE i.estado=:estado AND i.cidr=:cidr”);

Não sei como montar os parametros de forma correta, sempre dá o erro:

Exception in thread “main” java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: could not locate named parameter [1]

Muito obrigado a todos.

2 Respostas

O

Observe que seu método seta os parâmetros de acordo com a posição (query.setParameter(i+1…), ou seja, esse “i+1” é a posição do parâmetro setado. Assim ao chamar o método você precisa passar a posição e não os nomes dos parâmetros.
Ex: List lista = serviceIp.list(Ip.class, “SELECT i FROM Ip i WHERE i.estado=: ?1 AND i.cidr=: ?2”, e aqui no 3º argumento você passa os valores dos parâmetros);

standart

Muito Obrigado Osnir, foi batata.

Através da sua explicação eu fiz:

List lista = serviceIp.list(Ip.class, “SELECT i FROM Ip i WHERE i.estado=? and i.cidr=?”,“L”, classe);

funcionou!

Muito grato

Osnir:
Observe que seu método seta os parâmetros de acordo com a posição (query.setParameter(i+1…), ou seja, esse “i+1” é a posição do parâmetro setado. Assim ao chamar o método você precisa passar a posição e não os nomes dos parâmetros.
Ex: List lista = serviceIp.list(Ip.class, “SELECT i FROM Ip i WHERE i.estado=: ?1 AND i.cidr=: ?2”, e aqui no 3º argumento você passa os valores dos parâmetros);

Criado 3 de julho de 2010
Ultima resposta 3 de jul. de 2010
Respostas 2
Participantes 2