Standardspaltenwerte in JPA

1. Einleitung

In diesem Tutorial werden die Standardspaltenwerte in JPA untersucht.

Wir werden lernen, wie Sie sie als Standardeigenschaft in der Entität sowie direkt in der SQL-Tabellendefinition festlegen.

2. Beim Erstellen einer Entität

Die erste Möglichkeit, einen Standardspaltenwert festzulegen, besteht darin , ihn direkt als Entitätseigenschaftswert festzulegen :

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

Jedes Mal, wenn wir eine Entität mit dem neuen Operator erstellen, werden die von uns angegebenen Standardwerte festgelegt:

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

Es gibt einen Nachteil dieser Lösung. Wenn wir uns die SQL-Tabellendefinition ansehen, sehen wir keinen Standardwert darin:

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

Also, wenn wir sie mit überschreiben null , wird die Einheit ohne Fehler gespeichert werden:

@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. In der Schemadefinition

Um einen Standardwert direkt in der SQL-Tabellendefinition zu erstellen, können Sie die Annotation @Column verwenden und den Parameter columnDefinition festlegen :

@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; }

Bei Verwendung dieser Methode ist der Standardwert in der SQL-Tabellendefinition vorhanden:

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 );

Und die Entität wird ordnungsgemäß mit den Standardwerten gespeichert:

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

Denken Sie daran, dass wir mit dieser Lösung eine bestimmte Spalte beim ersten Speichern der Entität nicht auf null setzen können. Wenn wir keinen Wert angeben, wird der Standardwert automatisch festgelegt.

4. Zusammenfassung

In diesem kurzen Tutorial haben wir gelernt, wie Sie in JPA Standardspaltenwerte festlegen.

Wie immer ist der vollständige Quellcode auf GitHub verfügbar.