Duvida na criação da query com JPA

2 respostas
C

Estou desenvolvendo uma aplicação utilizando JPA, e estou necessitando fazer uma busca de usuários através de uma list de grupos.

Na classe Grupo:

@ManyToMany(mappedBy="grupos", fetch=FetchType.EAGER) private List<Usuario> usuarios;
Na classe Usuario:

@ManyToMany(fetch=FetchType.EAGER) @JoinTable( name="usuario_grupo" , joinColumns={ @JoinColumn(name="usuario_id") } , inverseJoinColumns={ @JoinColumn(name="grupo_id") } ) private List<Grupo> grupos;
A busca:

public List<Usuario> consutarViaGrupos(List <Grupo> list) throws Exception {
	String query="SELECT usuario FROM Usuario usuario WHERE usuario.grupos.id IN(";
	boolean a= false;
	for(Grupo e:list){
		if(a){
			query+=",";
		}
		query+=" "+e.getId();
		a=true;
	}
	query+=")";
	Query q = em.createQuery(query);
	List<Usuario> retorno = q.getResultList();
	return retorno;
}

A busca foi só uma tentativa que não funcionou, eu não tenho nenhuma ideia de como fazer essa query. Alguém pode ajudar?

2 Respostas

Rodrigo_Sasaki

você pode simplesmente mandar a lista, cara:public List<Usuario> consutarViaGrupos(List <Grupo> list) throws Exception { String jpql = "SELECT usuario FROM Usuario usuario WHERE usuario.grupos.id IN (:idList)"; TypedQuery<Usuario> query = em.createQuery(jpql, Usuario.class); query.setParameter("idList", list); return query.getResultList(); }

C

digaoneves:
você pode simplesmente mandar a lista, cara:public List<Usuario> consutarViaGrupos(List <Grupo> list) throws Exception { String jpql = "SELECT usuario FROM Usuario usuario WHERE usuario.grupos.id IN (:idList)"; TypedQuery<Usuario> query = em.createQuery(jpql, Usuario.class); query.setParameter("idList", list); return query.getResultList(); }

Mandando diretamente a lista não funcionou mas consegui fazer passando como parâmetro os objetos individualmente

public List<Usuario> consutarViaGrupos(List <Grupo> list) throws Exception {
		Map<String,Object> parametros= new HashMap<String, Object>();
		String query="SELECT usuario FROM Usuario usuario WHERE 1=1 ";
		for(Usuario e:list){
			query+=" AND usuario.grupos";
			query+="=(:idlist"+parametros.size()+") ";
			parametros.put("idlist"+parametros.size(),e);
		}
		TypedQuery<Usuario> queryy=em.createQuery(query,Usuario.clazz);
		for(String ele: parametros.keySet())
			query.setParameter(ele, parametros.get(ele)); 
		List<Usuario> retorno = queryy.getResultList();
		return retorno;
	}
Criado 13 de setembro de 2012
Ultima resposta 13 de set. de 2012
Respostas 2
Participantes 2