JPA: interrogazione su di una relazione ManyToMany
Ipotesi: relazione molti a molti tra la tabella atleti e la tabella gare implementata tramite una tabella di relazione.
Vediamo come si ottiene l'elenco degli atleti con le relative gare alle quali hano partecipato.
private void getRaceForAtlets() {
TypedQuery<Atleta> queryFindAllAtlets =
em.createNamedQuery("Atleta.findAll", Atleta.class);
List<Atleta> atletiList = queryFindAllAtlets.getResultList();
atletiList.forEach((a) -> {
a.getGareCollection().forEach((r) -> {
logger.info("atleta e gara -->" + a.getCognome() + " " + r.getCitta());
});
});
}
In pratica è sufficiente ottenere l'elenco degli atleti per intero e poi fare riferimento alla lista delle gare alle quali hanno partecipato.
L'oggetto Atleta, infatti, per definizione deve averla tra le sue proprietà perché si tratta di una relazione ManyToMany:
@JoinTable(name = "atleta_gare", joinColumns = {
@JoinColumn(name = "atleta_id", referencedColumnName = "id")}, inverseJoinColumns = {
@JoinColumn(name = "race_id", referencedColumnName = "id")})
@ManyToMany(fetch = FetchType.EAGER)
private Collection<Race> gareCollection;
Commenti
Posta un commento