Basis data saya berisi 3 tabel: Entitas Pengguna dan Layanan memiliki hubungan banyak-ke-banyak dan digabungkan dengan tabel SERVICE_USER sebagai berikut:
PENGGUNA - SERVICE_USER - SERVICES
Tabel SERVICE_USER berisi kolom BLOKED tambahan.
Apa cara terbaik untuk melakukan pemetaan seperti itu? Ini adalah kelas Entitas saya
@Entity
@Table(name = "USERS")
public class User implements java.io.Serializable {
private String userid;
private String email;
@Id
@Column(name = "USERID", unique = true, nullable = false,)
public String getUserid() {
return this.userid;
}
.... some get/set methods
}
@Entity
@Table(name = "SERVICES")
public class CmsService implements java.io.Serializable {
private String serviceCode;
@Id
@Column(name = "SERVICE_CODE", unique = true, nullable = false, length = 100)
public String getServiceCode() {
return this.serviceCode;
}
.... some additional fields and get/set methods
}
Saya mengikuti contoh ini http://giannigar.wordpress.com/2009/09/04/m ... using-jpa / Berikut adalah beberapa kode tes:
User user = new User();
user.setEmail("e2");
user.setUserid("ui2");
user.setPassword("p2");
CmsService service= new CmsService("cd2","name2");
List<UserService> userServiceList = new ArrayList<UserService>();
UserService userService = new UserService();
userService.setService(service);
userService.setUser(user);
userService.setBlocked(true);
service.getUserServices().add(userService);
userDAO.save(user);
Masalahnya adalah hibernasi tetap ada objek Pengguna dan UserService satu. Tidak berhasil dengan objek CmsService
Saya mencoba menggunakan EAGER fetch - tidak ada kemajuan
Apakah mungkin untuk mencapai perilaku yang saya harapkan dengan pemetaan yang disediakan di atas?
Mungkin ada beberapa cara yang lebih elegan untuk memetakan banyak ke banyak tabel bergabung dengan kolom tambahan?
@ElementCollection
dari salah satu (atau keduanya) Pengguna dan entitas Layanan.[userFK, serviceFK]
, gunakan kendala unik.Saya mencari cara untuk memetakan tabel asosiasi banyak-ke-banyak dengan kolom ekstra dengan hibernasi dalam konfigurasi file xml.
Diasumsikan memiliki dua tabel 'a' & 'c' dengan asosiasi banyak ke banyak dengan kolom bernama 'ekstra'. Karena saya tidak menemukan contoh lengkap, ini kode saya. Semoga ini bisa membantu :).
Pertama di sini adalah objek Java.
Sekarang, kita harus membuat tabel asosiasi. Langkah pertama adalah membuat objek yang mewakili kunci primer yang kompleks (a.id, c.id).
Sekarang mari kita buat objek asosiasi itu sendiri.
Pada titik ini, saatnya memetakan semua kelas kami dengan konfigurasi hibernate xml.
A.hbm.xml dan C.hxml.xml (quiete sama).
Dan kemudian file pemetaan asosiasi, a_c.hbm.xml.
Ini adalah contoh kode untuk diuji.
sumber
Seperti yang dikatakan sebelumnya, dengan JPA, untuk memiliki kesempatan untuk memiliki kolom tambahan, Anda perlu menggunakan dua asosiasi OneToMany, alih-alih hubungan ManyToMany tunggal. Anda juga dapat menambahkan kolom dengan nilai yang dibuat secara otomatis; dengan cara ini, ini bisa berfungsi sebagai kunci utama dari tabel, jika berguna.
Sebagai contoh, kode implementasi kelas tambahan akan terlihat seperti itu:
sumber