JPA kommentár a PostgreSQL TEXT típushoz

1. Bemutatkozás

Ebben a gyors bemutatóban elmagyarázzuk, hogyan kell kezelni a PostgreSQL TEXT típust a JPA specifikáció által definiált kommentárokkal.

2. A TEXT típus a PostgreSQL-ben

Amikor a PostgresSQL-lel dolgozunk, időnként szükségünk lehet tetszőleges hosszúságú karakterláncokra.

Ehhez a PostgreSQL három karaktertípust biztosít:

  • CHAR (n)
  • VARCHAR (n)
  • SZÖVEG

Sajnos a TEXT típus nem része azoknak a típusoknak, amelyeket az SQL szabvány kezel. Ez azt jelenti, hogy ha a JPA-jelöléseket használni akarjuk a perzisztencia-entitásainkban, akkor problémánk lehet.

A JPA specifikáció ugyanis az SQL szabványt használja. Következésképpen azt nem definiálja az ilyen típusú objektumok kezelésének egyszerű módját, például a @Szöveg annotáció.

Szerencsére van néhány lehetőségünk a PostgreSQL adatbázis TEXT adattípusának kezelésére:

  • Használhatjuk a @Fajankó annotáció
  • Alternatív megoldásként használhatjuk a @Oszlop kommentár, a oszlopDefiníció tulajdonság

Vessünk egy pillantást a @Fajankó annotáció.

3. @Fajankó

Ahogy a neve is mutatja, a karéj a large object. Az adatbázis szempontjából lebeny oszlopok nagyon hosszú szövegek vagy bináris fájlok tárolására szolgálnak.

Kétféle lobb közül választhatunk:

  • CLOB - karakterlánc szövegek tárolására
  • BLOB - bináris lebeny, amely bináris adatok tárolására használható

Használhatjuk a JPA-t @Fajankó annotáció nagy mezők nagy adatbázis objektumtípusokhoz való hozzárendeléséhez

Amikor használjuk a @Fajankó felvétel a Húr type attribútum, a JPA specifikáció szerint a perzisztencia-szolgáltatónak egy nagy karaktertípusú objektumot kell használnia az attribútum értékének tárolására. Következésképpen a PostgreSQL le tudja fordítani a karakterláncot TEXT típusúvá.

Tegyük fel, hogy van egy egyszerű Vizsga entitás objektum, a leírás mező, amelynek tetszőleges hossza lehet:

@Entity public class vizsga {@Id @GeneratedValue (strategy = GenerationType.AUTO) private Long id; @Lob private String leírás; } 

Használni a @Fajankó kommentár a leírás mezőben, utasítjuk a Hibernate-et ennek a mezőnek a kezelésére a PostgreSQL TEXT típus segítségével.

4. @Oszlop

A TEXT típus kezelésének másik lehetősége a @Oszlop annotáció, a oszlopDefiníció ingatlan.

Használjuk ugyanazt Vizsga entitás objektum újra, de ezúttal hozzáadunk egy TEXT mezőt, amely tetszőleges hosszúságú lehet:

@Entity public class Exam {@Id @GeneratedValue (strategy = GenerationType.AUTO) private Long id; @Lob private String leírás; @Column (columnDefinition = "TEXT") privát karakterlánc-szöveg; }

Ebben a példában az annotációt használjuk @ Oszlop (columnDefinition = "TEXT"). Használni a oszlopDefiníció attribútum lehetővé teszi számunkra, hogy meghatározzuk az SQL töredéket, amelyet az ilyen típusú adatoszlop összeállításakor használunk.

5. Az összes összefogása

Ebben a szakaszban egy egyszerű egységtesztet írunk a megoldás működésének ellenőrzésére:

@ Teszt nyilvános érvénytelen adottExam_whenSaveExam_thenReturnExpectedExam () {vizsga vizsga = új vizsga (); exam.setDescription ("Ez egy leírás. Néha a leírás nagyon hosszú lehet!"); exam.setText ("Ez egy szöveg. Néha a szöveg nagyon hosszú lehet!"); vizsga = vizsgaRaktár.mentés (vizsga); assertEquals (examRepository.find (exam.getId ()), vizsga); }

Ebben a példában egy új létrehozásával kezdjük Vizsga objektumot és az adatbázisunkba tartva. Ezután lekérjük a Vizsga objektumot az adatbázisból, és hasonlítsa össze az eredményt az általunk létrehozott eredeti vizsgával.

A lényeg bemutatásához, ha gyorsan módosítjuk a leírás mezőt Vizsga entitás:

@ Oszlop (hossz = 20) privát karakterlánc leírása; 

Amikor újra futtatjuk a tesztet, hibát fogunk látni:

HIBA o.h.e.jdbc.spi.SqlExceptionHelper - Az érték túl hosszú a "TEXT VARCHAR (20)" oszlophoz

6. Következtetés

Ebben az oktatóanyagban két megközelítést vizsgáltunk a JPA kommentárok PostgreSQL TEXT típusú használatához.

Először elmagyaráztuk, mire használják a TEXT típust, majd megláttuk, hogyan használhatjuk a JPA kommentárjait @Fajankó és @Oszlop menteni Húr objektumok, amelyek a PostgreSQL által definiált TEXT típust használják.

Mint mindig, a cikk teljes forráskódja elérhető a GitHubon.