Definovanie entít JPA

1. Úvod

V tomto tutoriáli sa dozvieme základné informácie o entitách spolu s rôznymi anotáciami, ktoré definujú a prispôsobujú entitu v JPA.

2. Subjekt

Subjekty v JPA nie sú nič iné ako POJO predstavujúce údaje, ktoré je možné uchovať v databáze. Entita predstavuje tabuľku uloženú v databáze. Každá inštancia entity predstavuje riadok v tabuľke.

2.1. The Subjekt Anotácia

Povedzme, že máme zavolaný POJO Študent ktorý predstavuje údaje študenta a chceli by sme ich uložiť do databázy.

verejná trieda Študent {// Fields, Getters and Setter}

Aby sme to mohli urobiť, mali by sme definovať entitu, aby si to JPA uvedomovalo.

Definujme to teda pomocou @Entity anotácia. Túto anotáciu musíme špecifikovať na úrovni triedy. Musíme tiež zabezpečiť, aby entita mala konštruktor no-arg a primárny kľúč:

@Entity verejná trieda Študent {// Fields, Getters and Setters}

Názov entity je predvolene nastavený na názov triedy. Jeho názov môžeme zmeniť pomocou názov element.

@Entity (name = "student") verejná trieda Student {// fields, getters and setters}

Pretože rôzne implementácie JPA sa pokúsia poskytnúť podtriedu našej entity, aby poskytli svoju funkčnosť, triedy entít sa nesmú deklarovať konečné.

2.2. The Id Anotácia

Každá entita JPA musí mať primárny kľúč, ktorý ju jednoznačne identifikuje. The @Id anotácia definuje primárny kľúč. Identifikátory môžeme generovať rôznymi spôsobmi, ktoré sú špecifikované v @GeneratedValue anotácia.

Môžeme si vybrať zo štyroch stratégií generovania id pomocou stratégia element. Hodnota môže byť AUTO, TABUĽKA, SEKVENCIA, alebo IDENTITA.

@Entity public class Student {@Id @GeneratedValue (strategy = GenerationType.AUTO) private Long id; súkromné ​​meno reťazca; // zakladatelia a zakladatelia}

Ak upresníme GenerationType.AUTO, poskytovateľ JPA použije akúkoľvek stratégiu, ktorú chce vygenerovať identifikátory.

Ak anotujeme polia entity, poskytovateľ JPA použije tieto polia na získanie a nastavenie stavu entity. Okrem prístupu do poľa môžeme urobiť aj prístup k nehnuteľnostiam alebo zmiešaný prístup, čo nám umožňuje využívať prístup k poľom aj k nehnuteľnostiam v tej istej entite..

2.3. The Tabuľka Anotácia

Väčšinou, názov tabuľky v databáze a názov entity nebudú rovnaké.

V týchto prípadoch môžeme názov tabuľky určiť pomocou znaku @ Tabuľka anotácia:

@Entity @Table (name = "STUDENT") verejná trieda Študent {// Fields, Getters and Setters}

Môžeme tiež spomenúť schému pomocou schéma element:

@Entity @Table (name = "STUDENT", schema = "SCHOOL") verejná trieda Student {// fields, getters and setters}

Názov schémy pomáha odlíšiť jednu skupinu tabuliek od druhej,

Ak nepoužívame @ Tabuľka anotácia, názov entity sa bude považovať za názov tabuľky.

2.4. The Stĺpec Anotácia

Rovnako ako @ Tabuľka anotáciu, môžeme použiť @ Stĺpec anotácia, ktorá uvádza podrobnosti o stĺpci v tabuľke.

The @ Stĺpec anotácia má veľa prvkov ako napr názov, dĺžka, povolená hodnota Null a jedinečné.

@Entity @Table (name = "STUDENT") verejná trieda Študent {@Id @GeneratedValue (strategy = GenerationType.AUTO) súkromné ​​Dlhé ID; @Column (name = "STUDENT_NAME", length = 50, nullable = false, unique = false) private String name; // ďalšie polia, getre a setre}

The názov element určuje názov stĺpca v tabuľke. The dĺžka prvok určuje jeho dĺžku. The nullable prvok určuje, či má stĺpec povolenú hodnotu Null, alebo jedinečný element určuje, či je stĺpec jedinečný.

Ak neurčíme túto anotáciu, bude sa názov poľa považovať za názov stĺpca v tabuľke.

2.5. The Prechodné Anotácia

Niekedy možno budeme chcieť aby pole nebolo trvalé. Môžeme použiť @ Prechodné anotácia. Určuje, že pole nebude trvalé.

Napríklad môžeme vypočítať vek študenta od dátumu narodenia.

Poďme teda pole anotovať Vek s @ Prechodné anotácia:

@Entity @Table (name = "STUDENT") verejná trieda Študent {@Id @GeneratedValue (strategy = GenerationType.AUTO) súkromné ​​Dlhé ID; @Column (name = "STUDENT_NAME", length = 50, nullable = false) private String name; @ Prechodný vek súkromných celých čísel; // ďalšie polia, getre a setre}

Vo výsledku pole Vek nebude pretrvávať pri stole.

2.6. The Dočasný Anotácia

V niektorých prípadoch možno budeme musieť časové hodnoty uložiť do našej tabuľky.

Na to máme @ Temporal anotácia:

@Entity @Table (name = "STUDENT") verejná trieda Študent {@Id @GeneratedValue (strategy = GenerationType.AUTO) súkromné ​​Dlhé ID; @Column (name = "STUDENT_NAME", length = 50, nullable = false, unique = false) private String name; @ Prechodný vek súkromných celých čísel; @Temporal (TemporalType.DATE) súkromné ​​Dátum narodeniaDátum; // ďalšie polia, getre a setre}

S JPA 2.2 však máme aj podporu pre java.time.LocalDate, java.time.LocalTime, java.time.LocalDateTime, java.time.OffsetTime a java.time.OffsetDateTime.

2.7. The Vymenované Anotácia

Niekedy môžeme chcieť vytrvať v prostredí Java enum typu.

Môžeme použiť @ Vymenované anotácia určiť, či enum by mali byť trvalé podľa mena alebo podľa poradia (predvolené).

verejné enum Pohlavie {MALE, FEMALE} 
@Entity @Table (name = "STUDENT") verejná trieda Študent {@Id @GeneratedValue (strategy = GenerationType.AUTO) súkromné ​​Dlhé ID; @Column (name = "STUDENT_NAME", length = 50, nullable = false, unique = false) private String name; @ Prechodný vek súkromných celých čísel; @Temporal (TemporalType.DATE) súkromné ​​Dátum narodeniaDátum; @Enumerated (EnumType.STRING) súkromné ​​pohlavie; // ďalšie polia, getre a setre}

Vlastne, nemusíme špecifikovať @ Vymenované anotáciu vôbec, ak budeme pretrvávať rod podľa enumJe radový.

Avšak, aby pretrvávali rod od enum meno, nakonfigurovali sme anotáciu na EnumType.STRING.

3. Záver

V tomto článku sme sa dozvedeli, čo sú entity JPA a ako ich vytvárať. Dozvedeli sme sa tiež o rôznych anotáciách, ktoré je možné použiť na ďalšie prispôsobenie entity.

Celý kód tohto článku nájdete na stránkach Github.