Untuk generator sebetulnya sama halnya yang telah saya tulis materinya di sini yaitu dengan menggunakan:

  1. Sequance/Auto_Increment Generator
  2. UUID

Ok yang pertama kita bahas dulu dengan menggunakan sequance generator:

Sequance Generator

Untuk menggunakan sequance yang pasti kita perlu check dulu apakah database yang kita gunakan support dengan sequance, jika tidak kita cukup dengan seperti berikut:

package com.maryanto.dimas.bootcamp.example.simple.entity.kampus;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.time.LocalDateTime;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(
        name = "kelas_sequance_table",
        schema = "kampus"
)
public class ClassWithSequanceGenerator {

    @Id
    @Column(name = "kode")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @Column(name = "nama", length = 10)
    private String name;
    @Column(name = "angkatan", length = 4)
    private Integer year;
    @Column(name = "created_by", length = 100, nullable = false)
    private String createdBy;
    @Column(name = "created_datetime", nullable = false)
    private LocalDateTime createdDateTime;
    @Column(name = "last_updated_by", length = 100)
    private String lastUpdateBy;
    @Column(name = "last_updated_datetime")
    private LocalDateTime lastUpdatedBy;
}

Tetapi jika support seperti database yang kita gunakan ini, maka kita bisa menggunakan annotation @SequanceGenerator berikut adalah implementasinya:

Implementasi entity:

Implementasi DAO:

Implementasi Unit Testing:

Setelah itu coba dijalankan unit testingnya, maka hasilnya seperti berikut:

Hibernate: 
    select
        nextval ('kampus.seq_kelas')
[main] INFO com.maryanto.dimas.bootcamp.test.kampus.TestClassWIthSequanceGeneratorConstraint - inserted value: ClassWithSequanceGenerator(id=2, name=IPS 2, year=2001, createdBy=admin, createdDateTime=2021-01-03T16:21:50.589681300, lastUpdateBy=null, lastUpdatedBy=null)
Hibernate: 
    insert 
    into
        kampus.kelas_sequance_table
        (created_by, created_datetime, last_updated_by, last_updated_datetime, nama, angkatan, kode) 
    values
        (?, ?, ?, ?, ?, ?, ?)
[main] INFO com.maryanto.dimas.bootcamp.test.kampus.TestClassWIthSequanceGeneratorConstraint - destroy hibernate session!

UUID Generator

Untuk menggunakan UUID, kita bisa menggunakan annotation @GenericGenerator contohnya seperti berikut:

Implementasi Entity:

Implementasi DAO:

Implementasi Unit Testing:

Setelah itu coba dijalankan unit testingnya, maka hasilnya seperti berikut:

Jan 03, 2021 4:35:10 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.kampus.TestClassWIthUuidGenerator - inserted value: ClassWithUuidGenerator(id=7eca938b-35af-4944-9a18-a3a13dd61112, name=IPS 2, year=2001, createdBy=admin, createdDateTime=2021-01-03T16:35:10.901056400, lastUpdateBy=null, lastUpdatedBy=null)
Hibernate: 
    insert 
    into
        kampus.kelas_check
        (created_by, created_datetime, last_updated_by, last_updated_datetime, nama, angkatan, kode) 
    values
        (?, ?, ?, ?, ?, ?, ?)
[main] INFO com.maryanto.dimas.bootcamp.test.kampus.TestClassWIthUuidGenerator - destroy hibernate session!