Valori di colonna predefiniti in JPA

1. Introduzione

In questo tutorial, esamineremo i valori di colonna predefiniti in JPA.

Impareremo come impostarli come proprietà predefinita nell'entità e direttamente nella definizione della tabella SQL.

2. Durante la creazione di un'entità

Il primo modo per impostare un valore di colonna predefinito è impostarlo direttamente come valore della proprietà dell'entità :

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

Ora, ogni volta che creeremo un'entità utilizzando il nuovo operatore, imposterà i valori predefiniti che abbiamo fornito:

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

C'è uno svantaggio di questa soluzione. Quando diamo un'occhiata alla definizione della tabella SQL, non vedremo alcun valore predefinito in essa:

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

Quindi, se li sovrascriviamo con null , l'entità verrà salvata senza alcun errore:

@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. Nella definizione dello schema

Per creare un valore predefinito direttamente nella definizione della tabella SQL possiamo utilizzare l' annotazione @Column e impostare il suo parametro 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; }

Utilizzando questo metodo il valore predefinito sarà presente nella definizione della tabella 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 );

E l'entità verrà salvata correttamente con i valori predefiniti:

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

Ricorda che utilizzando questa soluzione, non saremo in grado di impostare una determinata colonna su null quando si salva l'entità per la prima volta. Se non forniamo alcun valore, quello predefinito verrà impostato automaticamente.

4. Riepilogo

In questo breve tutorial, abbiamo imparato come impostare i valori di una colonna predefinita in JPA.

Come sempre, il codice sorgente completo è disponibile su GitHub.