Estou com a seguinte duvida, como poderia fazer um JPQL para trazer informações de uma tabela associativa ?
No SQL ela fica dessa forma:
select * from pessoa_time where id_Pessoa = 1;
Ela me traz todos os dados de pessoa_time que tem id_pessoa igual a 1. Desejo fazer essa consulta em JPQL, vou explicar o porque:
O sistema possui cadastro de Pessoas, e pessoas podem Cadastrar Times. A ideia e listar todos os Times de uma certa pessoa.
Vamos as classes:
Pessoa:
@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;
/*@ManyToMany
@JoinTable(name="Pessoa_Time",joinColumns={@JoinColumn(name="id_pessoa")},
inverseJoinColumns={@JoinColumn(name="id_time")})*/
@ManyToMany(mappedBy="listaPessoas")
private List<Time> listaTimes;
Time:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column (name="id_Time")
private int id;
@Column(nullable=false)
private String nome;
@Column(nullable=false)
private String senhaTime;
/*@ManyToMany(mappedBy="listaTimes")*/
@ManyToMany
@JoinTable(name="Pessoa_Time",joinColumns={@JoinColumn(name="id_time")},
inverseJoinColumns={@JoinColumn(name="id_pessoa")})
private List<Pessoa> listaPessoas;
O meu metodo atual esta da seguinte forma:
public List<Time> listarmeustimes(Pessoa pessoa) {
Pessoa resultado = new Pessoa();
String consulta = "select t from Time t join t.pessoas p where p.id = :id";
Query query = getEm().createQuery(consulta);
query.setParameter("id", pessoa.getId());
List<Time> meustimes = query.getResultList();
for (Time time : meustimes) {
System.out.println(time.getNome());
}
return meustimes;
}
Esse esta um pouco mais complexo porque eu pego o ID da pessoa que ja esta logado no sistema. Mas acredito que com essas informações voces ja conseguiram entender o meu problema.