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.