Nilai Lajur Lalai dalam JPA

1. Pengenalan

Dalam tutorial ini, kita akan melihat nilai lajur lalai dalam JPA.

Kami akan belajar bagaimana menetapkannya sebagai harta lalai dalam entiti dan juga secara langsung dalam definisi jadual SQL.

2. Semasa Membuat Entiti

Cara pertama untuk menetapkan nilai lajur lalai adalah menetapkannya secara langsung sebagai nilai harta entiti :

@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 membuat entiti menggunakan operator baru, ia akan menetapkan nilai lalai yang telah kita sediakan:

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

Terdapat satu kelemahan penyelesaian ini. Apabila kita melihat definisi jadual SQL, kita tidak akan melihat nilai lalai di dalamnya:

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

Oleh itu, jika kita menimpanya dengan nol , entiti tersebut akan disimpan tanpa sebarang 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 lalai secara langsung dalam definisi jadual SQL kita boleh menggunakan anotasi @Column dan menetapkan 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 kaedah ini, nilai lalai akan terdapat dalam definisi jadual 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 entiti akan disimpan dengan betul dengan nilai lalai:

@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 bahawa dengan menggunakan penyelesaian ini, kami tidak akan dapat menetapkan lajur tertentu menjadi nol semasa menyimpan entiti untuk pertama kalinya. Sekiranya kita tidak memberikan nilai, nilai lalai akan ditetapkan secara automatik.

4. Ringkasan

Dalam tutorial ringkas ini, kami telah mempelajari cara menetapkan nilai lajur lalai di JPA.

Seperti biasa, kod sumber penuh tersedia di GitHub.