Verschil tussen @Size, @Length en @Column (lengte = waarde)

1. Overzicht

In deze korte tutorial bekijken we JSR-330's @Grootte, Hibernate @Lengte en JPA @Kolom‘S lengte attribuut.

Op het eerste gezicht, deze lijken misschien hetzelfde, maar ze vervullen verschillende functies. Laten we eens kijken hoe.

2. Oorsprong

Simpel gezegd, al deze annotaties zijn bedoeld voor communiceer de grootte van een veld.

@Grootte en @Lengte Zijn hetzelfde. We kunnen beide gebruiken om de grootte van een veld te valideren. De eerste is een annotatie volgens de Java-standaard en de tweede is specifiek voor Hibernate.

@Kolomis echter een JPA-annotatie die we gebruiken om DDL-statements te beheren.

Laten we ze nu allemaal in detail bekijken.

3. @Grootte

Voor validaties gebruiken we @Grootte, een annotatie van bean-validatie. Laten we de eigenschap gebruiken Midden-naam geannoteerd met @Grootte om de waarde tussen de attributen te valideren min en max:

openbare klasse Gebruiker {// ... @Size (min = 3, max = 15) private String middleName; // ...}

Het allerbelangrijkste, @Grootte maakt de boon onafhankelijk van JPA en zijn leveranciers zoals Hibernate. Hierdoor is dit draagbaarder dan @Lengte.

4. @Lengte

En zoals we net zeiden, @Lengte is de Hibernate-specifieke versie van @Grootte. Laten we het bereik versterken voor achternaam gebruik makend van @Lengte:

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

5. @Column (lengte = waarde)

@Kolomis echter heel anders.

We zullen gebruiken @Kolom naar geven specifieke kenmerken van de fysieke databankkolom aan. Laten we de lengte attribuut van de @Kolom annotatie om de kolomlengte met tekenreekswaarde te specificeren:

@Entity openbare klasse Gebruiker {@Column (lengte = 3) privé String firstName; // ...}

Bijgevolg zou de resulterende kolom worden gegenereerd als een VARCHAR (3) en als u probeert een langere tekenreeks in te voegen, resulteert dit in een SQL-fout.

Merk op dat we @Kolom alleen om tabelkolomeigenschappen op te geven omdat het geen validaties biedt.

Natuurlijk, we kunnen gebruiken @Kolom samen met @Grootte om de eigenschap van de databasekolom op te geven met bean-validatie.

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

6. Conclusie

In dit artikel hebben we geleerd over de verschillen tussen de @Grootte annotatie, @Lengte annotatie en @Kolom‘S lengte attribuut. We hebben elk afzonderlijk onderzocht binnen de toepassingsgebieden.

Zoals altijd is de volledige broncode van de voorbeelden beschikbaar op GitHub.