Jumat, 21 September 2012

Many to Many


Bila kita sudah menguasai pemetaan One-to-Many, maka Many-to- Many tidak sulit. Perbedaannya hanya terletak di anotasinya. Yang tadinya @OneToMany, diganti menjadi @ManyToMany. Sama dengan One-to-Many, kita harus menentukan sisi mana yang inverse. Pada contoh kali ini, sisi inverse terletak pada class User.

Berikut isi class User.

public class User {
@ManyToMany(mappedBy = "members")
private Set<Group> groups = new HashSet<Group>();
}

Berikut pemetaan di class Group.

public class Group {
@ManyToMany
@JoinTable(
name = "T_GROUP_MEMBERS",
joinColumns = {@JoinColumn(name = "group_id")},
inverseJoinColumns = {@JoinColumn(name = "user_id")}
)
private Set<User> members = new HashSet<User>();
}


Pemetaan many-to-many membutuhkan tabel perantara. Anotasi @JoinTable digunakan untuk mengatur nama tabel dan kolom dalam tabel perantara. Jika kita menghilangkan anotasinya, maka JPA akan mencari tabel bernama T_GROUP_T_USER dengan nama kolom groups_id dan members_id. 

Berikut adalah struktur tabel database yang dipetakan oleh anotasi di atas.

Tidak ada komentar:

Posting Komentar