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

Post popolari in questo blog

Da un progetto Java Maven ad un jar "eseguibile" che comprende tutto quanto necessario alla sua esecuzione.

Git: branch e merge, comandi essenziali

Log4j - configurazione ed utilizzo