Object Relational Framework for Java 3 minute read

Untuk mencoba mapping OneToMany kita membutuhkan 3 table, contohnya mahasiswa, alamat, relasi antara mahasiswa dan alamat misal namanya kita sebut mahasiswa_alamat_list, berikut adalah perancangan tabelnya:

erd

Untuk alamat kita masih menggunakan class yang sebelunya yaitu

Implementasi Entity Alamat:

Implementasi DAO Alamat:

Sedangkan untuk mahasiswa kita buat class baru, contohnya seperti berikut:

Implementasi Entity Mahasiswa:

Implementasi DAO Mahasiswa:

Setelah itu kita akan buat unit testingnya, seperti berikut:

Jika di running maka akan menghasilkan seperti berikut:

INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@64502326] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
Hibernate: 
    
    create table mapping.mahasiswa_alamat_list (
       mahasiswa_id varchar(255) not null,
        alamat_id varchar(255) not null
    )
Hibernate: 
    
    create table mapping.mahasiswa_onetomany (
       id varchar(255) not null,
        nama varchar(50) not null,
        nim varchar(8) not null,
        tahun_masuk int4 not null,
        tanggal_lahir date not null,
        primary key (id)
    )
Hibernate: 
    
    alter table if exists mapping.mahasiswa_alamat_list 
       drop constraint if exists UK_931a2tmanbisy2blist4hpad3
Jan 12, 2021 7:34:52 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper$StandardWarningHandler logWarning
WARN: SQL Warning Code: 0, SQLState: 00000
Jan 12, 2021 7:34:52 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper$StandardWarningHandler logWarning
WARN: constraint "uk_931a2tmanbisy2blist4hpad3" of relation "mahasiswa_alamat_list" does not exist, skipping
Hibernate: 
    
    alter table if exists mapping.mahasiswa_alamat_list 
       add constraint UK_931a2tmanbisy2blist4hpad3 unique (alamat_id)
Hibernate: 
    
    alter table if exists mapping.mahasiswa_onetomany 
       drop constraint if exists UK_6jp8c1te4duklyhwsj8vhfbi3
Jan 12, 2021 7:34:52 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper$StandardWarningHandler logWarning
WARN: SQL Warning Code: 0, SQLState: 00000
Jan 12, 2021 7:34:52 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper$StandardWarningHandler logWarning
WARN: constraint "uk_6jp8c1te4duklyhwsj8vhfbi3" of relation "mahasiswa_onetomany" does not exist, skipping
Hibernate: 
    
    alter table if exists mapping.mahasiswa_onetomany 
       add constraint UK_6jp8c1te4duklyhwsj8vhfbi3 unique (nim)
Hibernate: 
    
    alter table if exists mapping.mahasiswa_alamat_list 
       add constraint fk_alamat_id 
       foreign key (alamat_id) 
       references mapping.alamat
Hibernate: 
    
    alter table if exists mapping.mahasiswa_alamat_list 
       add constraint fk_mahasiswa_id 
       foreign key (mahasiswa_id) 
       references mapping.mahasiswa_onetomany
Jan 12, 2021 7:34:52 PM org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService
INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
[main] INFO com.maryanto.dimas.bootcamp.test.mapping.TestMahasiswaOneToManyEntity - mahasiswa baru: MahasiswaOneToManyEntity(id=12bd5796-5dcf-4db7-b365-98c1928c149c, nim=10511148, nama=Dimas Maryanto, tanggalLahir=1993-03-01, tahunMasuk=2011, listAlamat=[AlamatEntity(id=a24c86f6-a628-4250-9496-518f4f149f05, provinsi=Jawa Barat, kota=Kab. Bandung, kelurahan=Cileunyi, kecamatan=Cinunuk, rw=18, rt=6, kodePos=40526, namaJalan=Jl Bukit indah B8), AlamatEntity(id=c344fd83-0274-4188-bb2a-85ba135fb62f, provinsi=Jawa Barat, kota=Kab. Bandung, kelurahan=Cileunyi, kecamatan=Cinunuk, rw=18, rt=6, kodePos=40526, namaJalan=Jl Bukit indah B8 A)])
Hibernate: 
    insert 
    into
        mapping.alamat
        (kecamatan, kelurahan, kode_pos, kota, nama_jalan, provinsi, rt, rw, id) 
    values
        (?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    insert 
    into
        mapping.alamat
        (kecamatan, kelurahan, kode_pos, kota, nama_jalan, provinsi, rt, rw, id) 
    values
        (?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    insert 
    into
        mapping.mahasiswa_onetomany
        (nama, nim, tahun_masuk, tanggal_lahir, id) 
    values
        (?, ?, ?, ?, ?)
Hibernate: 
    insert 
    into
        mapping.mahasiswa_alamat_list
        (mahasiswa_id, alamat_id) 
    values
        (?, ?)
Hibernate: 
    insert 
    into
        mapping.mahasiswa_alamat_list
        (mahasiswa_id, alamat_id) 
    values
        (?, ?)
[main] INFO com.maryanto.dimas.bootcamp.test.mapping.TestMahasiswaOneToManyEntity - destroy hibernate session!

Kemudian kita check di tabel mahasiswa, alamat dan mahasiswa_alamat_list berikut:

select-tables

Summary

Untuk OneToMany Mapping kita harus menggunakan @OneToMany dan menggunakan @JoinTable sebagai tabel penghubung antara property List<AlamatEntity> dan class MahasiswaOneToManyEntity