JPA-merknad for PostgreSQL TEKST-typen

1. Introduksjon

I denne raske opplæringen, Vi forklarer hvordan du administrerer PostgreSQL TEXT-typen ved hjelp av kommentarene som er definert av JPA-spesifikasjonen.

2. TEKST-typen i PostgreSQL

Når vi jobber med PostgresSQL, kan det hende at vi trenger å lagre en streng med en vilkårlig lengde.

For dette gir PostgreSQL tre karaktertyper:

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

Dessverre er ikke TEKST-typen en del av typene som administreres av SQL-standarden. Dette betyr at hvis vi vil bruke JPA-merknader i våre utholdenhetsenheter, kan vi ha et problem.

Dette er fordi JPA-spesifikasjonen bruker SQL-standarden. Følgelig, det definerer ikke en enkel måte å håndtere denne typen objekter på, for eksempel a @Tekst kommentar.

Heldigvis har vi et par muligheter for å administrere TEXT-datatypen for en PostgreSQL-database:

  • Vi kan bruke @Lob kommentar
  • Alternativt kan vi også bruke @Kolonne kommentar, kombinert med columnDefinition Egenskap

La oss nå ta en titt på de to løsningene som begynner med @Lob kommentar.

3. @Lob

Som navnet antyder, er en lob en large object. I databasetermer, lob kolonner brukes til å lagre veldig lange tekster eller binære filer.

Vi kan velge mellom to typer lobber:

  • CLOB - en tegnlobb som brukes til å lagre tekster
  • BLOB - en binær lob som kan brukes til å lagre binære data

Vi kan bruke JPA @Lob kommentar for å kartlegge store felt til store database-objekttyper.

Når vi bruker @Lob ta opp på en String type-attributt, sier JPA-spesifikasjonen at utholdenhetsleverandøren skal bruke et stort tegn-type-objekt for å lagre verdien av attributtet. Følgelig kan PostgreSQL oversette en tegnloppe til en TEKST-type.

La oss anta at vi har en enkel Eksamen enhetsobjekt, med en beskrivelse felt, som kan ha en vilkårlig lengde:

@Entity public class Exam {@Id @GeneratedValue (strategi = GenerationType.AUTO) privat Lang id; @Lob private strengbeskrivelse; } 

Bruker @Lob kommentar i beskrivelsesfeltet, vi instruerer dvalemodus om å administrere dette feltet ved hjelp av PostgreSQL TEXT-typen.

4. @Kolonne

Et annet alternativ for å administrere TEXT-typen er å bruke @Kolonne kommentar, sammen med columnDefinition eiendom.

La oss bruke det samme Eksamen enhetsobjekt igjen, men denne gangen legger vi til et TEKST-felt, som kan ha en vilkårlig lengde:

@Entity public class Exam {@Id @GeneratedValue (strategi = GenerationType.AUTO) privat Lang id; @Lob private strengbeskrivelse; @Column (columnDefinition = "TEKST") privat strengtekst; }

I dette eksemplet bruker vi merknaden @Column (columnDefinition = ”TEKST”). Bruker columnDefinition attributt lar oss spesifisere SQL-fragmentet som skal brukes når vi konstruerer datakolonnen for denne typen.

5. Å bringe det hele sammen

I denne delen vil vi skrive en enkel enhetstest for å bekrefte at løsningen fungerer:

@Test offentlig ugyldig gittExam_whenSaveExam_thenReturnExpectedExam () {Eksamen eksamen = ny eksamen (); exam.setDescription ("Dette er en beskrivelse. Noen ganger kan beskrivelsen være veldig veldig lang!"); exam.setText ("Dette er en tekst. Noen ganger kan teksten være veldig veldig lang!"); eksamen = examRepository.save (eksamen); assertEquals (examRepository.find (exam.getId ()), eksamen); }

I dette eksemplet begynner vi med å lage en ny Eksamen innvende og vedvare den til databasen vår. Vi henter deretter Eksamen objekt fra databasen og sammenlign resultatet med den opprinnelige eksamenen vi opprettet.

For å demonstrere poenget, hvis vi raskt endrer beskrivelsesfeltet på vårt Eksamen enhet:

@Column (lengde = 20) privat strengbeskrivelse; 

Når vi kjører testen vår igjen, ser vi en feil:

FEIL o.h.e.jdbc.spi.SqlExceptionHelper - Verdien er for lang for kolonnen "TEKST VARCHAR (20)"

6. Konklusjon

I denne opplæringen dekket vi to tilnærminger for bruk av JPA-merknader med PostgreSQL TEXT-typen.

Vi begynte med å forklare hva TEKST-typen brukes til, og så så hvordan vi kan bruke JPA-merknadene @Lob og @Kolonne å redde String objekter som bruker TEXT-typen definert av PostgreSQL.

Som alltid er hele kildekoden til artikkelen tilgjengelig på GitHub.


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