JPA-kommentar til PostgreSQL TEXT-typen

1. Introduktion

I denne hurtige vejledning Vi forklarer, hvordan man styrer PostgreSQL TEXT-typen ved hjælp af de kommentarer, der er defineret af JPA-specifikationen.

2. TEKST-typen i PostgreSQL

Når vi arbejder med PostgresSQL, kan det være nødvendigt med jævne mellemrum at gemme en streng med en vilkårlig længde.

Til dette giver PostgreSQL tre karaktertyper:

  • CHAR (n)
  • VARCHAR (n)
  • TEKST

Desværre er TEXT-typen ikke en del af de typer, der styres af SQL-standarden. Dette betyder, at hvis vi vil bruge JPA-annoteringer i vores vedholdenhedsenheder, kan vi have et problem.

Dette skyldes, at JPA-specifikationen bruger SQL-standarden. Derfor er det definerer ikke en enkel måde at håndtere denne type objekt ved hjælp af for eksempel en @Tekst kommentar.

Heldigvis har vi et par muligheder for at administrere TEXT-datatypen til en PostgreSQL-database:

  • Vi kan bruge @Lob kommentar
  • Alternativt kan vi også bruge @Kolonne kommentar kombineret med columnDefinition attribut

Lad os nu se på de to løsninger, der begynder med @Lob kommentar.

3. @Lob

Som navnet antyder, er en lob en large object. I databasetermer, lob-kolonner bruges til at gemme meget lange tekster eller binære filer.

Vi kan vælge mellem to slags lobs:

  • CLOB - en tegnlob, der bruges til at gemme tekster
  • BLOB - en binær lob, der kan bruges til at gemme binære data

Vi kan bruge JPA @Lob kommentar for at kortlægge store felter til store database-objekttyper.

Når vi bruger @Lob optage på en Snor type attribut, siger JPA-specifikationen, at udholdenhedsudbyderen skal bruge et objekt med stor karaktertype til at gemme værdien af ​​attributten. Derfor kan PostgreSQL oversætte et tegnlob til en TEKST-type.

Lad os antage, at vi har en simpel Eksamen enhedsobjekt med en beskrivelse felt, som kunne have en vilkårlig længde:

@Entity offentlig klasseeksamen {@Id @GeneratedValue (strategi = GenerationType.AUTO) privat Lang id; @Lob privat streng beskrivelse; } 

Bruger @Lob kommentar i beskrivelsesfeltet, vi instruerer dvale om at styre dette felt ved hjælp af PostgreSQL TEXT-typen.

4. @Kolonne

En anden mulighed for styring af TEXT-typen er at bruge @Kolonne kommentar sammen med columnDefinition ejendom.

Lad os bruge det samme Eksamen enhedsobjekt igen, men denne gang tilføjer vi et TEKST-felt, der kan have en vilkårlig længde:

@Entity offentlig klasseeksamen {@Id @GeneratedValue (strategi = GenerationType.AUTO) privat Lang id; @Lob privat streng beskrivelse; @Column (columnDefinition = "TEXT") privat strengtekst; }

I dette eksempel bruger vi kommentaren @Column (columnDefinition = ”TEKST”). Bruger columnDefinition attribut giver os mulighed for at specificere det SQL-fragment, der skal bruges, når vi konstruerer datakolonnen til denne type.

5. At bringe det hele sammen

I dette afsnit skriver vi en simpel enhedstest for at kontrollere, at vores løsning fungerer:

@Test offentligt ugyldigt givetExam_whenSaveExam_thenReturnExpectedExam () {Eksamen eksamen = ny eksamen (); exam.setDescription ("Dette er en beskrivelse. Nogle gange kan beskrivelsen være meget meget lang!"); exam.setText ("Dette er en tekst. Nogle gange kan teksten være meget meget lang!"); eksamen = examRepository.save (eksamen); assertEquals (examRepository.find (exam.getId ()), eksamen); }

I dette eksempel begynder vi med at oprette et nyt Eksamen protesterer og vedvarer det i vores database. Vi henter derefter Eksamen objekt fra databasen og sammenlign resultatet med den oprindelige eksamen, vi oprettede.

For at demonstrere pointen, hvis vi hurtigt ændrer beskrivelsesfeltet på vores Eksamen enhed:

@Kolonne (længde = 20) privat beskrivelse af streng; 

Når vi kører vores test igen, ser vi en fejl:

FEJL o.h.e.jdbc.spi.SqlExceptionHelper - Værdien er for lang til kolonnen "TEKST VARCHAR (20)"

6. Konklusion

I denne vejledning dækkede vi to tilgange til brug af JPA-kommentarer med PostgreSQL TEXT-typen.

Vi begyndte med at forklare, hvad TEXT-typen bruges til, og så så, hvordan vi kan bruge JPA-kommentarerne @Lob og @Kolonne at gemme Snor objekter, der bruger TEXT-typen defineret af PostgreSQL.

Som altid er artiklens fulde kildekode tilgængelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found