Nilai Kolom Default di JPA

1. Perkenalan

Dalam tutorial ini, kita akan melihat nilai kolom default di JPA.

Kita akan belajar bagaimana mengaturnya sebagai properti default di entitas serta secara langsung dalam definisi tabel SQL.

2. Saat Membuat Entitas

Cara pertama untuk mengatur nilai kolom default adalah dengan mengaturnya secara langsung sebagai nilai properti entitas :

@Entity public class User { @Id private Long id; private String firstName = "John Snow"; private Integer age = 25; private Boolean locked = false; }

Sekarang, setiap kali kita akan membuat entitas menggunakan operator baru, itu akan menetapkan nilai default yang telah kita berikan:

@Test void saveUser_shouldSaveWithDefaultFieldValues() { User user = new User(); user = userRepository.save(user); assertEquals(user.getName(), "John Snow"); assertEquals(user.getAge(), 25); assertFalse(user.getLocked()); }

Ada satu kelemahan dari solusi ini. Saat kita melihat definisi tabel SQL, kita tidak akan melihat nilai default di dalamnya:

create table user ( id bigint not null constraint user_pkey primary key, name varchar(255), age integer, locked boolean );

Jadi, jika kita menimpanya dengan null , entitas tersebut akan disimpan tanpa kesalahan:

@Test void saveUser_shouldSaveWithNullName() { User user = new User(); user.setName(null); user.setAge(null); user.setLocked(null); user = userRepository.save(user); assertNull(user.getName()); assertNull(user.getAge()); assertNull(user.getLocked()); }

3. Dalam Definisi Skema

Untuk membuat nilai default secara langsung dalam definisi tabel SQL, kita dapat menggunakan anotasi @Column dan mengatur parameter columnDefinition :

@Entity public class User { @Id Long id; @Column(columnDefinition = "varchar(255) default 'John Snow'") private String name; @Column(columnDefinition = "integer default 25") private Integer age; @Column(columnDefinition = "boolean default false") private Boolean locked; }

Dengan menggunakan metode ini, nilai default akan ada dalam definisi tabel SQL:

create table user ( id bigint not null constraint user_pkey primary key, name varchar(255) default 'John Snow', age integer default 35, locked boolean default false );

Dan entitas akan disimpan dengan benar dengan nilai default:

@Test void saveUser_shouldSaveWithDefaultSqlValues() { User user = new User(); user = userRepository.save(user); assertEquals(user.getName(), "John Snow"); assertEquals(user.getAge(), 25); assertFalse(user.getLocked()); }

Ingatlah bahwa dengan menggunakan solusi ini, kami tidak akan dapat menyetel kolom tertentu ke null saat menyimpan entitas untuk pertama kalinya. Jika kami tidak memberikan nilai apa pun, nilai default akan disetel secara otomatis.

4. Ringkasan

Dalam tutorial singkat ini, kita telah mempelajari cara mengatur nilai kolom default di JPA.

Seperti biasa, kode sumber lengkap tersedia di GitHub.