Consulta JPQL @ManyToMany com tabelas (não relacionadas diretamente)
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:
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!!!
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
Curtidas 0
Melhor post
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
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!
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
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
https://docs.jboss.org/hibernate/orm/3.5/reference/pt-BR/html/queryhql.html#queryhql-joins
GOSTEI 1