Setelah pada artikel sebelumnya dibahas tentang one-to-one relationship. Artikel kali ini akan membahas tentang one-to-many relationship menggunakan JPA dan spring boot. Untuk konfigurasi project anda bisa membacanya di Spring boot Hibernate Basic 1 CRUD Menggunakan database H2.
ERD
contoh yang akan digunakan adalah antara Provinsi dan Kabupaten. 1 Provinsi terdiri dari banyak kabupaten, 1 kabupaten hanya memiliki satu Provinsi.
Model / Entitas
Dari ERD akan dibuat modelnya pada package wilayah. File yang akan dibuat adalah Provinsi.java dan Kabupaten.java
Provinsi.java
@Entity
@Data
public class Provinsi {
@Id
@Column(name = "CODE_PROVINSI")
private String codeProvinsi;
@Column(name = "NAMA")
private String nama;
@OneToMany(mappedBy = "provinsi", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Kabupaten> kabupatens = new ArrayList<Kabupaten>();
}
Pada Provinsi.java object kabupatens menampung list kabupaten-kabupaten apa saja yang dimiliki oleh Provinsi ini. Dengan penjelasan anotasinya adalah sebagai berikut :
- @OneToMany: Menandakan bahwa hubungan ini adalah relasi satu ke banyak (One-to-Many). Provinsi sebagai onenya dan kabupaten sebagai manynya.
- mappedBy = "provinsi" : Menentukan nama atribut di entitas tujuan yang mengelola hubungan / relation ini (Kabupaten). properti ini menunjukkan bahwa entitas (Provinsi) ini tidak memiliki kolom relasi pada tabelnya, tetapi entitas lainlah (Kabupaten) yang memiliki / mengelolanya. Menandakan juga bahwa nama variabel yang mengelola adalah "provinsi".
- cascade = CascadeType.ALL: Menyatakan bahwa semua operasi (persist, merge, remove, refresh, detach) yang dilakukan pada entitas induk juga akan dilakukan pada entitas anak (Kabupaten).
- orphanRemoval = true: Mengatur bahwa entitas anak (Kabupaten) yang tidak lagi terhubung ke entitas induk (Provinsi) akan dihapus dari database.
Kabupaten.java
@Entity
@Data
public class Kabupaten {
@Id
private String codeKabupaten;
private String nama;
@ManyToOne()
@JoinColumn(name = "codeProvinsi")
private Provinsi provinsi;
}
Pada class Kabupaten, variabel provinsi digunakan sebagai penghubung dengan keterangan anotasinya sebagai berikut:
- @ManyToOne: Menandakan bahwa hubungan ini adalah relasi banyak ke satu (Many-to-One), artinya banyak entitas Kabupaten dapat merujuk ke satu entitas Provinsi.
- @JoinColumn(name = "codeProvinsi"): Menentukan kolom dalam tabel Kabupaten yang akan menyimpan referensi ke entitas Provinsi. Nama kolom ini adalah codeProvinsi yang akan otomatis diterjemahkan menjadi kolom code_provinsi pada tabel Kabupaten.
Repository
JPARepository digunakan untuk melakukan pengelolaan entitas dari model Provinsi dan Kabupaten.
ProvinsiRepository.java
@Repository
public interface ProvinsiRepository extends JpaRepository<Provinsi, String>{
}
KabupatenRepository.java
@Repository
public interface KabupatenRepository extends JpaRepository<Kabupaten, String>{
}
Service
Karena dalam package wilayah, digunakan WilayahService untuk melakukan akses ke repository dan model dari Provinsi dan Kabupaten. Buat satu fungsi yaitu saveProvinsi untuk melakukan penyimpanan ke database.
WilayahService.java
@Service
public class WilayahService {
@Autowired
private KabupatenRepository kabupatenRepository;
@Autowired
private ProvinsiRepository provinsiRepository;
@Transactional(propagation = Propagation.REQUIRED)
public void saveProvinsi(Provinsi provinsi) {
provinsiRepository.save(provinsi);
}
}
Test Run
untuk melakukan test akan dibuat method runProvinsi pada file utama project (LearnHibernateApplication.java).
Test Code
@SpringBootApplication
public class LearnHibernateApplication {
public static void main(String[] args) throws Exception {
ApplicationContext applicationContext = SpringApplication.run(LearnHibernateApplication.class, args);
//...
WilayahService wilayahService = applicationContext.getBean(WilayahService.class);
runProvinsi(wilayahService);
}
// ...
public static void runProvinsi(WilayahService wilayahService) {
Provinsi jabar = new Provinsi();
jabar.setCodeProvinsi("32");
jabar.setNama("Jawa Barat");
Kabupaten cirebon = new Kabupaten();
cirebon.setCodeKabupaten("3209");
cirebon.setNama("Kabupaten Cirebon");
cirebon.setProvinsi(jabar);
jabar.getKabupatens().add(cirebon);
Kabupaten bogor = new Kabupaten();
bogor.setCodeKabupaten("3201");
bogor.setNama("Kabupaten Bogor");
bogor.setProvinsi(jabar);
jabar.getKabupatens().add(bogor);
wilayahService.saveProvinsi(jabar);
}
}
Hasil
Source code pada github anda bisa lihat disini github - wilayah package.
Referensi
- https://www.baeldung.com/hibernate-one-to-many diakses 8 Juni 2024
Posting Komentar untuk "Spring boot Hibernate Basic 5 One To Many "
Berilah komentar, saran, dan kritik dengan bijak