JPA napomena za tip TEKSTA PostgreSQL

1. Uvod

U ovom brzom vodiču, objasnit ćemo kako se upravlja s PostgreSQL TEXT tipom pomoću napomena definiranih JPA specifikacijom.

2. Tip TEKSTA u PostgreSQL-u

Kada radimo s PostgresSQL-om, povremeno ćemo možda trebati pohraniti niz proizvoljne duljine.

Za to, PostgreSQL nudi tri vrste znakova:

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

Nažalost, tip TEXT nije dio tipova kojima upravlja SQL standard. To znači da ako želimo koristiti JPA bilješke u svojim entitetima postojanosti, možda imamo problem.

To je zato što JPA specifikacija koristi SQL standard. Slijedom toga, to ne definira jednostavan način rukovanja ovom vrstom objekta pomoću, na primjer, a @Tekst bilješka.

Srećom, imamo nekoliko mogućnosti za upravljanje tipom TEKST za bazu podataka PostgreSQL:

  • Možemo koristiti @Lob bilješka
  • Alternativno, možemo koristiti i @Stupac napomena, u kombinaciji s stupacDefinicija atribut

Pogledajmo sada dva rješenja koja počinju s @Lob bilješka.

3. @Lob

Kao što i samo ime govori, lob je a large objekt. U terminima baze podataka, lob stupci koriste se za pohranu vrlo dugih tekstova ili binarnih datoteka.

Možemo birati između dvije vrste lobova:

  • CLOB - lob znakova koji se koristi za spremanje tekstova
  • BLOB - binarni lob koji se može koristiti za pohranu binarnih podataka

Možemo koristiti JPA @Lob napomena za mapiranje velikih polja u velike tipove objekata baze podataka.

Kada koristimo @Lob zapis na a Niz atribut type, JPA specifikacija kaže da bi pružatelj trajnosti trebao koristiti veliki objekt tipa znakova za pohranu vrijednosti atributa. Posljedično tome, PostgreSQL može prevesti znak znakova u tip TEKST.

Pretpostavimo da imamo jednostavan Ispit objekt entiteta, s opis polje, koje može imati proizvoljnu duljinu:

@ Ispit javne klase entiteta {@Id @GeneratedValue (strategy = GenerationType.AUTO) private Long id; @Lob opis privatnog niza; } 

Koristiti @Lob napomena u polju opisa, upućujemo Hibernate da upravlja ovim poljem pomoću tipa TEXT PostgreSQL.

4. @Stupac

Druga mogućnost upravljanja tipom TEXT je upotreba @Stupac napomena, zajedno s stupacDefinicija imovine.

Upotrijebimo isto Ispit entitet entiteta, ali ovaj put ćemo dodati polje TEKST koje bi moglo biti proizvoljne duljine:

@ Ispit javne klase entiteta {@Id @GeneratedValue (strategy = GenerationType.AUTO) private Long id; @Lob opis privatnog niza; @Column (columnDefinition = "TEXT") privatni tekst niza; }

U ovom primjeru koristimo napomenu @Kolona (columnDefinition = ”TEXT”). Koristiti stupacDefinicija atribut omogućuje nam da odredimo SQL fragment koji će se koristiti pri konstruiranju stupca podataka za ovu vrstu.

5. Sve to zajedno

U ovom ćemo odjeljku napisati jednostavan jedinični test kako bismo provjerili radi li naše rješenje:

@Test javna praznina givenExam_whenSaveExam_thenReturnExpectedExam () {Ispit ispita = novi ispit (); exam.setDescription ("Ovo je opis. Ponekad opis može biti jako dug!"); exam.setText ("Ovo je tekst. Ponekad tekst može biti jako jako dugačak!"); exam = examRepository.save (ispit); assertEquals (examRepository.find (exam.getId ()), exam); }

U ovom primjeru započinjemo stvaranjem novog Ispit objekt i ustraje u našoj bazi podataka. Zatim dohvaćamo Ispit objekt iz baze podataka i usporedite rezultat s izvornim ispitom koji smo stvorili.

Da pokažemo poantu, ako brzo izmijenimo polje opisa na našem Ispit entitet:

@ Stupac (duljina = 20) opis privatnog niza; 

Kad ponovo pokrenimo test, vidjet ćemo pogrešku:

POGREŠKA o.h.e.jdbc.spi.SqlExceptionHelper - Vrijednost je preduga za stupac "TEXT VARCHAR (20)"

6. Zaključak

U ovom smo tutorijalu pokrili dva pristupa korištenju JPA bilješki s PostgreSQL TEXT tipom.

Počeli smo objašnjavajući za što se koristi tip TEXT, a zatim smo vidjeli kako možemo koristiti JPA bilješke @Lob i @Stupac spremiti Niz objekti koji koriste tip TEKST definiran PostgreSQL-om.

Kao i uvijek, puni izvorni kôd članka dostupan je na GitHub-u.


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