Object Relational Framework for Java 2 minute read

Untuk mencoba mapping OneToOne kita perlu 2 table, contohnya disini kita buat antara mahasiswa dan alamat, berikut adalah contoh perancangan tablenya:

erd

pertama kita buat dulu entity untuk alamat seperti berikut

Implementasi Entity Alamat:

Implementasi DAO Alamat:

Setelah itu alamat akan berrelasi dengan mahasiswa dengan mapping @OneToOne. seperti berikut:

Implementasi Entity Mahasiswa:

Implementasi DAO Mahasiswa:

Setelah itu kita akan buat unit testingnya, seperti berikut:

Jika di running hasilnya seperti berikut:

INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@29bcf51d] 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.alamat (
       id varchar(255) not null,
        kecamatan varchar(100),
        kelurahan varchar(100),
        kode_pos int4,
        kota varchar(50),
        nama_jalan varchar(100),
        provinsi varchar(50),
        rt int4,
        rw int4,
        primary key (id)
    )
Hibernate: 
    
    create table mapping.mahasiswa_onetoone (
       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,
        alamat varchar(255),
        primary key (id)
    )
Hibernate: 
    
    alter table if exists mapping.mahasiswa_onetoone 
       drop constraint if exists UK_pphjot1ymr0wvpn46lf87i8xp
Jan 12, 2021 7:21:35 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper$StandardWarningHandler logWarning
WARN: SQL Warning Code: 0, SQLState: 00000
Jan 12, 2021 7:21:35 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper$StandardWarningHandler logWarning
WARN: constraint "uk_pphjot1ymr0wvpn46lf87i8xp" of relation "mahasiswa_onetoone" does not exist, skipping
Hibernate: 
    
    alter table if exists mapping.mahasiswa_onetoone 
       add constraint UK_pphjot1ymr0wvpn46lf87i8xp unique (nim)
Hibernate: 
    
    alter table if exists mapping.mahasiswa_onetoone 
       add constraint FK1sp9lq015h4m5fag7jbakcy3j 
       foreign key (alamat) 
       references mapping.alamat
Jan 12, 2021 7:21:35 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.TestMahasiswaOneToOneEntityOneToOne - mahasiswa baru: MahasiswaOneToOneEntity(id=d9aa105a-78aa-4168-a5d8-f1665f0b9730, nim=10511148, nama=Dimas Maryanto, tanggalLahir=1993-03-01, tahunMasuk=2011, alamat=AlamatEntity(id=f3d7f449-85fb-4e10-835e-cc5983fd2876, provinsi=Jawa Barat, kota=Kab. Bandung, kelurahan=Cileunyi, kecamatan=Cinunuk, rw=18, rt=6, kodePos=40526, namaJalan=Jl Bukit indah))
Hibernate: 
    insert 
    into
        mapping.alamat
        (kecamatan, kelurahan, kode_pos, kota, nama_jalan, provinsi, rt, rw, id) 
    values
        (?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    insert 
    into
        mapping.mahasiswa_onetoone
        (alamat, nama, nim, tahun_masuk, tanggal_lahir, id) 
    values
        (?, ?, ?, ?, ?, ?)
[main] INFO com.maryanto.dimas.bootcamp.test.mapping.TestMahasiswaOneToOneEntityOneToOne - destroy hibernate session!

Berikut adalah hasilnya di table mahasiswa dan alamat :

select-tables

Summary

OneToOne mapping, kita harus menggunakan annotation @OneToOne dan @JoinColumn untuk melakukan modifikasi spesifikasi pada column referencenya.