Unterschied zwischen @Size, @Length und @Column (Länge = Wert)

1. Übersicht

In diesem kurzen Tutorial, werden wir einen Blick auf JSR-330 des nehmen @size , Hibernate @Length und JPA @Column ‚s Länge Attribut.

Auf den ersten Blick mögen diese gleich erscheinen, aber sie erfüllen unterschiedliche Funktionen . Mal sehen wie.

2. Ursprünge

Einfach ausgedrückt, alle diese Anmerkungen sollen die Größe eines Feldes kommunizieren.

@Size und @Length sind ähnlich. Wir können entweder verwenden, um die Größe eines Feldes zu überprüfen. Die erste ist eine Java-Standard-Annotation und die zweite ist spezifisch für den Ruhezustand.

@Column ist jedoch eine JPA-Annotation, mit der wir DDL-Anweisungen steuern.

Lassen Sie uns nun jeden einzelnen von ihnen im Detail durchgehen.

3. @Size

Für Validierungen verwenden wir @Size , eine Bean-Validierungsanmerkung. Verwenden wir die mit @Size kommentierte Eigenschaft middleName , um den Wert zwischen den Attributen min und max zu überprüfen :

public class User { // ... @Size(min = 3, max = 15) private String middleName; // ... }

Am wichtigsten ist, dass @Size die Bean unabhängig von JPA und seinen Anbietern wie Hibernate macht . Infolgedessen ist dies portabler als @Length .

4. @Length

Und wie bereits erwähnt, ist @Length die Hibernate-spezifische Version von @Size. Lassen Sie uns den Bereich für lastName mit @Length erzwingen :

@Entity public class User { // ... @Length(min = 3, max = 15) private String lastName; // ... }

5. @Column (Länge = Wert)

@ Column ist jedoch ganz anders.

Wir werden @Column verwenden , um bestimmte Merkmale der physischen Datenbankspalte anzugeben. Lassen Sie sich verwenden , um die Länge Attribut der @Column Annotation die String-Wert Spaltenlänge angeben:

@Entity public class User { @Column(length = 3) private String firstName; // ... }

Folglich würde die resultierende Spalte als VARCHAR (3) generiert, und der Versuch, eine längere Zeichenfolge einzufügen, würde zu einem SQL-Fehler führen.

Beachten Sie, dass wir @Column nur verwenden, um Tabellenspalteneigenschaften anzugeben, da keine Validierungen bereitgestellt werden .

Natürlich können wir @Column zusammen mit @Size verwenden , um die Eigenschaft der Datenbankspalte mit Bean-Validierung anzugeben.

@Entity public class User { // ... @Column(length = 5) @Size(min = 3, max = 5) private String city; // ... }

6. Fazit

In dieser Zuschreibung, haben wir gelernt , über die Unterschiede zwischen der @size Anmerkung, @Length Annotation und @Column ‚s Länge Attribut. Wir haben jedes einzeln in den Bereichen ihrer Verwendung untersucht.

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