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.