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.

Super Basic Guide to Cyberark Web Connectors

JPA: dichiarazione di un Identificativo che utilizza una Sequence