Mengetahui 4 Jenis Strategi Pembuatan Kunci Utama pada JPA
Anotasi JPA @GeneratedValue digunakan untuk menentukan strategi pembuatan nilai kunci utama (primary key) pada suatu entitas.
Anotasi @GeneratedValue menentukan bahwa nilai identifier suatu entitas dihasilkan secara otomatis menggunakan kolom identitas (identity column), urutan database (database sequence), atau pembuat tabel (table generator). Hibernate mendukung pemetaan @GeneratedValue bahkan untuk identifier UUID.
JPA mendukung 4 jenis strategi pembuatan kunci utama, yaitu AUTO, TABLE, SEQUENCE, atau IDENTITY.
GenerationType.AUTO adalah jenis pembuatan nilai default yang memungkinkan penyedia persistensi memilih strategi pembuatan nilai.
Sebagai contoh, anggaplah kita memiliki kelas entitas JPA untuk mahasiswa dengan jenis pembuatan nilai AUTO:
@Entity@Table(name = "student")public class Student { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id", updatable = false, nullable = false) private Long id; @Column(name = "first_name") private String firstName; @Column(name = "last_name") private String lastName; @Column(name = "email") private String email; public Student() { } // getter dan setter}
GenerationType.IDENTITY mengandalkan kolom database yang diinkremen secara otomatis dan memungkinkan database menghasilkan nilai baru pada setiap operasi masukan.
Sebagai contoh, anggaplah kita memiliki kelas entitas JPA untuk mahasiswa dengan jenis pembuatan nilai IDENTITY:
@Entity@Table(name = "student")public class Student { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", updatable = false, nullable = false) private Long id; @Column(name = "first_name") private String firstName; @Column(name = "last_name") private String lastName; @Column(name = "email") private String email; public Student() { } // getter dan setter}
GenerationType.SEQUENCE untuk menghasilkan nilai kunci utama dan menggunakan urutan database untuk menghasilkan nilai unik.
Sebagai contoh, anggaplah kita memiliki kelas entitas JPA untuk mahasiswa dengan jenis pembuatan nilai SEQUENCE:
@Entity@Table(name = "student")public class Student { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) @Column(name = "id", updatable = false, nullable = false) private Long id; @Column(name = "first_name") private String firstName; @Column(name = "last_name") private String lastName; @Column(name = "email") private String email; public Student() { } // getter dan setter}
GenerationType.TABLE hanya digunakan sangat jarang saat ini. Ini mensimulasikan urutan dengan menyimpan dan memperbarui nilai saat ini di tabel database yang membutuhkan penggunaan kunci pesimistis yang menempatkan semua transaksi dalam urutan berurutan. Ini akan memperlambat aplikasi Anda, dan oleh karena itu, Anda harus memilih GenerationType.SEQUENCE jika database Anda mendukung urutan, yang dilakukan oleh kebanyakan database populer.
Sebagai contoh, anggaplah kita memiliki kelas entitas JPA untuk mahasiswa dengan jeniskelamin sebagai atributnya. Kita dapat membuat kelas tersebut sebagai berikut:
@Entity
public class Mahasiswa {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nama;
private String jenisKelamin;
// constructors, getters, setters, dan methods lainnya
}
Dalam kelas tersebut, kita menggunakan anotasi @Entity untuk menandakan bahwa kelas tersebut merupakan entitas JPA yang akan disimpan ke dalam database. Atribut id diberi anotasi @Id untuk menandakan bahwa atribut tersebut merupakan primary key dalam tabel yang akan dibuat di database. Atribut nama dan jenisKelamin merupakan atribut biasa dalam kelas yang akan di-mapping ke dalam kolom-kolom di tabel database.
Untuk menyimpan objek dari kelas Mahasiswa ke dalam database, kita dapat menggunakan objek EntityManager dari JPA. Contohnya sebagai berikut:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("nama-persistence-unit");
EntityManager em = emf.createEntityManager();
Mahasiswa mahasiswa = new Mahasiswa();
mahasiswa.setNama("John Doe");
mahasiswa.setJenisKelamin("Laki-laki");
em.getTransaction().begin();
em.persist(mahasiswa);
em.getTransaction().commit();
em.close();
emf.close();
Pada contoh di atas, kita menggunakan EntityManagerFactory untuk membuat objek EntityManager. Kemudian kita membuat objek Mahasiswa dengan nama "John Doe" dan jenis kelamin "Laki-laki". Untuk menyimpan objek tersebut ke dalam database, kita memulai transaksi dengan memanggil em.getTransaction().begin(), kemudian memanggil em.persist(mahasiswa) untuk menyimpan objek Mahasiswa ke dalam database. Setelah itu, kita memanggil em.getTransaction().commit() untuk menyelesaikan transaksi. Terakhir, kita menutup objek EntityManager dan EntityManagerFactory.
Demikianlah cara sederhana untuk menyimpan objek ke dalam database menggunakan JPA. Tentunya masih banyak lagi hal-hal yang dapat dilakukan dengan JPA seperti melakukan querying data, melakukan relasi antar tabel, dan lain sebagainya.
Post a Comment for "Mengetahui 4 Jenis Strategi Pembuatan Kunci Utama pada JPA"