Thursday, August 21, 2025

Jenis Join Table & Implementasi

 Topik ini sangat penting untuk sistem perbankan, implementasi join table adalah tulang punggung relasi antar entitas seperti nasabah, rekening, transaksi, dan otorisasi. Mari kita bedah berbagai jenis join dan implementasinya di masing-masing teknologi persistence:


🔗 Jenis Join Table & Implementasi

1. JPA (Java Persistence API)

JPA mendukung join melalui relasi entity dan JPQL:

  • OneToOne / ManyToOne / OneToMany / ManyToMany
  • Gunakan @JoinColumn atau @JoinTable untuk relasi eksplisit
  • Query: SELECT a FROM Account a JOIN a.customer c WHERE c.name = :name

📌 Contoh di banking:

@Entity
public class Account {
  @ManyToOne
  @JoinColumn(name = "customer_id")
  private Customer customer;
}

Digunakan untuk menghubungkan akun dengan nasabah.


2. Hibernate

Hibernate adalah implementasi JPA + fitur tambahan:

  • Mendukung fetching strategies (LAZY, EAGER)
  • Bisa pakai HQL: FROM Account a JOIN a.transactions t WHERE t.amount > 10000
  • Mendukung Named Entity Graphs dan Criteria API

📌 Contoh di banking:
Mengambil transaksi besar dari akun tertentu dengan caching dan lifecycle management.


3. JDBC

JDBC adalah low-level, jadi join dilakukan manual via SQL:

String sql = "SELECT a.*, c.* FROM account a JOIN customer c ON a.customer_id = c.id";
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();

📌 Contoh di banking:
Digunakan untuk laporan audit atau migrasi data, karena kontrol penuh atas query dan performa.


4. MyBatis

MyBatis mengandalkan XML/Annotation untuk mapping SQL:

<select id="getAccountsWithCustomer" resultMap="accountCustomerMap">
  SELECT a.*, c.* FROM account a JOIN customer c ON a.customer_id = c.id
</select>
  • Bisa pakai resultMap untuk nested mapping
  • Cocok untuk query kompleks dan fleksibel

📌 Contoh di banking:
Digunakan untuk dashboard transaksi, laporan bulanan, atau integrasi dengan sistem legacy.


🏦 Studi Kasus Implementasi di Banking

EntitasRelasi JoinTujuan
Customer ↔ Account@ManyToOne / SQL JOINMenampilkan semua akun milik nasabah
Account ↔ Transaction@OneToMany / JOIN TABLEMelacak histori transaksi dan saldo
Account ↔ Approval@OneToOne / JOIN TABLEMenyimpan status persetujuan kredit atau limit
User ↔ Role ↔ Permission@ManyToManyManajemen otorisasi dan akses sistem

No comments:

Post a Comment