Pessoal, estou tendo um pouco de dificuldade com JPQL, e Hibernate em geral. Ja estou revisando os cursos que envolvem o assunto, mas enquanto isso queria poder contar com a ajuda de vocês.
Meu sistema possui Pessoas e Time, e uma associativa entre eles chamada PessoaTime, eu desejo fazer um método que vai listar todos os dados da PessoaTime(IdPessoa) que estão em um certo Time(IdTime). A query e a seguinte:
select p.nomeUsuario, pt.cargo from pessoa_time pt
inner join Pessoa p on p.id_pessoa=pt.id_pessoa
inner join Time t on t.id_time=pt.id_time
where t.id_time=1;
Minha duvida e de como faria isso no JPQL. Ja dei inicio a construçao do meu Metodo:
public List<PessoaTime> listarParticipantes(Time time) {
String consulta = "";
Query query = getEm().createQuery(consulta);
query.setParameter("pTime", time.getId());
List<PessoaTime> participantes = query.getResultList();
return participantes;
}
Vou adicionar tambem as classes de Model para que possam entender melhor:
Pessoa Model:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column (name = "id_Pessoa")
private Integer id;
@Column()
private String nomeUsuario;
@Column()
private String senhaUsuario;
@Column()
private String nomeCompleto;
@Column()
private String email;
@Column()
private Integer idade;
@OneToMany(mappedBy = "pessoa", cascade = CascadeType.MERGE)
private List<PessoaTime> listaPessoaTime;
Time Model:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column (name = "id_Time")
private int id;
@Column(nullable = false)
private String nome;
@Column(nullable = false)
private String senhaTime;
@OneToMany(mappedBy = "time",cascade = CascadeType.MERGE)
private List<PessoaTime> listaPessoaTime;
PessoaTime Model:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column (name="id_PessoaTime")
private Integer id;
@ManyToOne(cascade = CascadeType.MERGE)
@JoinColumn(name="id_pessoa")
private Pessoa pessoa;
@ManyToOne(cascade = CascadeType.MERGE)
@JoinColumn(name="id_time")
private Time time;
@Enumerated(EnumType.STRING)
private Cargo cargo;