Description
Composite Primary Key adalah kombinasi dari dua atau lebih kolom dari table untuk dijadikan primary key atau acuan identitas data.
Di JPA kita bisa membuat Composite Primary Key dengan dua cara yaitu menggunakan anotasi @IdClass dan @EmbeddedId.
Untuk membuat Composite Primary Key, kita harus ikuti aturan berikut:
1. Class Composite Primary Key harus public
2. Harus memiliki Konstruktor kosong/tanpa parameter(no-arg constructor)
3. Class harus implementasi Serializable
How To
1. Menggunakan anotasi @IdClass
Disini kita contohkan kita memiliki table Account yang memiliki kolom, accountNumber dan accountType yang mana dua column tersebut akan kita gunakan sebagai Composite Primary Key di JPA kita.
Pertama kita buat class AccountId sebagai primary key nya.
public class AccountId implements Serializable { private String accountNumber; private String accountType; // default constructor public AccountId(String accountNumber, String accountType) { this.accountNumber = accountNumber; this.accountType = accountType; } // equals() and hashCode() }
disini kita gunakan class AccountId dan kita deklarasikan accountNumber dan accountType menggunakan anotasi @Id
public class Account { private String accountNumber; private String accountType; // other fields, getters and setters }
2. Menggunakan anotasi @EmbeddedId
@EmbeddedId adalah alternative dari @IdClass, disini kita contohkan kita memiliki table Book yang dia memiliki kolom title dan language.
pertama kita buat class BookId sebagai field primary key nya.
public class BookId implements Serializable { private String title; private String language; // default constructor public BookId(String title, String language) { this.title = title; this.language = language; } // getters, equals() and hashCode() methods }
setelah kita buat kelas BookId kita gunakan di entitynya dengan menggunakan anotasi @EmbeddedId seperti dibawah.
public class Book { private BookId bookId; // constructors, other fields, getters and setters }
@EmbeddedId vs @IdClass
perbedaannya adalah @IdClass lebih simple dari cara query JPQL nya seperti dibawah ini.
query menggunakan @IdClass
SELECT account.accountNumber FROM Account account
query menggunakan @EmbeddedId
SELECT book.bookId.title FROM Book book
Komentar
Posting Komentar