Consulta JPQL @ManyToMany com tabelas (não relacionadas diretamente)

Java

21/09/2014

Boa noite pessoal, estou com o seguinte problema:

Possuo um sistema que contém as entidades Usuario, GrupoDeTrabalho, Projeto... As mesmas estão relacionadas da seguinte forma: Usuário/GrupoDeTrabalho através de um @ManyToMany e GrupoDeTrabalho/Projeto através de um @ManyToMany, segue o código dos relacionamentos:

public class Usuario implements Serializable {

	@ManyToMany
	@JoinTable(name="tb_grupo_usuario", joinColumns=@JoinColumn(name="gus_usuario", nullable=false), inverseJoinColumns=@JoinColumn(name="gus_grupotrabalho"))
	private List<Grupotrabalho> grupostrabalhos = new LinkedList<>();
}


public class Grupotrabalho implements Serializable {

       @ManyToMany
	@JoinTable(name="tb_projeto_grupo", joinColumns=@JoinColumn(name="pgr_grupotrabalho", nullable=false), inverseJoinColumns=@JoinColumn(name="pgr_projeto"))
	private List<Projeto> projetos = new LinkedList<>();

	//bi-directional many-to-many association to Usuario
	@ManyToMany(mappedBy="grupostrabalhos")
	private List<Usuario> usuarios = new LinkedList<>();
}


public class Projeto implements Serializable {

	@ManyToMany(mappedBy="projetos")
	private List<Grupotrabalho> grupostrabalhos = new LinkedList<>();
}


Como podem ver tenho como o "lado forte" do relacionamento Usuario/GrupoDeTrabalho a entidade Usuário, e no relacionamento GrupoDeTrabalho/Projeto o "lado forte" é o Grupo...

Estou tentando criar um método que retorne todos usuários passando o ID de um projeto como parametro através de uma consulta JPQL.. "getUsuariosPorProjeto" e vice-versa "getProjetosPorUsuario"
Como podem perceber as entidades Usuário e Projeto não estão diretamente relacionadas, mas as duas possuem alguma relação com o Grupo de trabalho, já pesquisei conceitos de subquery mas não estou conseguindo aplicar, alguém com alguma luz ???

Obrigado ! Até mais!!!
Bruno Santana

Bruno Santana

Curtidas 0

Melhor post

Ronaldo Lanhellas

Ronaldo Lanhellas

22/09/2014

Já tentou isto ?

SELECT u FROM Projeto pr
JOIN FETCH pr.groupstrabalhos gt 
JOIN FETCH gt.usuarios u
WHERE pr.id = :idProjeto
GOSTEI 1

Mais Respostas

Bruno Santana

Bruno Santana

21/09/2014

Ronaldo !!! VC É SELEÇÃO!!!!!!!!! AUHAUHAUHU salvou minha vida cara, funcionou perfeitamente... !!

Muito obrigado, vc tem algum site e/ou livro para indicar onde posso dar uma consultada nesse conceito de JOIN FETCH ?!?! até entao não tinha visto sobre isso... valeu !!!!!


Abraços, até mais!
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

21/09/2014

Que bom que deu certo. Você pode estudar na documentação oficial sobre o JOIN FETCH, que é bem completa:
https://docs.jboss.org/hibernate/orm/3.5/reference/pt-BR/html/queryhql.html#queryhql-joins
GOSTEI 1
POSTAR