segunda-feira, dezembro 10, 2012

Relações Many-to-Many em JPA

Apesar de não serem muito comuns há situações onde é necessário utilizar relações many-to-many. Se a nível da BD existe uma tabela intermédia que promove a relação entre outras duas tabelas, a nível de objectos (classes), apenas vão existir 2 em que cada um delas tem uma lista da outra.

Imaginando que temos uma tabela de federateds e uma tabela de scores, em que um federated tem vários scores mas que um score também pode pertencer a vários federateds quando estes formam uma equipa num determinado evento.

Como se pode ver a nível de BD a tabela federated_score promove a relação entre as duas tabelas que realmente interessam a federated e a scores. Agora a nível de código como fica implementando em JPA:

@Entity
@Table(name = "scores")
public class Score {
[...]
    @ManyToMany
    @JoinTable(name="federated_score",
       joinColumns=@JoinColumn(name="score_id", referencedColumnName="id"),
       inverseJoinColumns=@JoinColumn(name="federation_code", 
       referencedColumnName="federation_code")
    )
    private Collection<Federated> federateds;
[...]
}

@Entity
@Table(name = "federateds")
public class Federated {
[...]
    @ManyToMany
    @JoinTable(name="federated_score",
       joinColumns=@JoinColumn(name="federation_code", referencedColumnName="federation_code"),
       inverseJoinColumns=@JoinColumn(name="score_id",  referencedColumnName="id")
     )
     private Collection<Score> scores;
[...]
}


Sem comentários: