Definition af JPA-enheder

1. Introduktion

I denne vejledning lærer vi om det grundlæggende ved enheder sammen med forskellige kommentarer, der definerer og tilpasser en enhed i JPA.

2. Enhed

Enheder i JPA er intet andet end POJO'er, der repræsenterer data, der kan opretholdes i databasen. En enhed repræsenterer en tabel, der er gemt i en database. Hver forekomst af en enhed repræsenterer en række i tabellen.

2.1. Det Enhed Kommentar

Lad os sige, at vi har en POJO kaldet Studerende som repræsenterer dataene for en studerende, og vi vil gerne gemme dem i databasen.

public class Student {// felter, getters og setters}

For at gøre dette skal vi definere en enhed, så JPA er opmærksom på den.

Så lad os definere det ved at bruge @Enhed kommentar. Vi skal specificere denne kommentar på klasseniveau. Vi skal også sikre, at enheden har en no-arg konstruktør og en primær nøgle:

@Entity public class Student {// felter, getters og setters}

Enhedsnavnet er som standard navnet på klassen. Vi kan ændre navnet ved hjælp af navn element.

@Entity (name = "student") offentlig klasse studerende {// felter, getters og setters}

Fordi forskellige JPA-implementeringer vil prøve at underklasse vores enhed for at levere deres funktionalitet, enhedsklasser må ikke erklæres endelig.

2.2. Det Id Kommentar

Hver JPA-enhed skal have en primær nøgle, der entydigt identificerer den. Det @Id annotation definerer den primære nøgle. Vi kan generere identifikatorerne på forskellige måder, som er specificeret af @GeneratedValue kommentar.

Vi kan vælge mellem fire id-genereringsstrategier med strategi element. Værdien kan være AUTO, BORD, SEKVENS, eller IDENTITET.

@Entity public class Student {@Id @GeneratedValue (strategi = GenerationType.AUTO) privat Lang id; privat strengnavn; // getters og setters}

Hvis vi specificerer GenerationType.AUTO, vil JPA-udbyderen bruge enhver strategi, den ønsker at generere identifikatorerne.

Hvis vi kommenterer enhedens felter, bruger JPA-udbyderen disse felter til at hente og indstille enhedens tilstand. Ud over feltadgang kan vi også udføre ejendomsadgang eller blandet adgang, som gør det muligt for os at bruge både feltadgang og ejendomsadgang i samme enhed.

2.3. Det Bord Kommentar

I de fleste tilfælde, navnet på tabellen i databasen og navnet på enheden vil ikke være det samme.

I disse tilfælde kan vi specificere tabelnavnet ved hjælp af @Bord kommentar:

@Entity @Table (name = "STUDENT") offentlig klasse studerende {// felter, getters og setters}

Vi kan også nævne skemaet ved hjælp af skema element:

@Entity @Table (name = "STUDENT", schema = "SCHOOL") offentlig klasse elev {// felter, getters og setters}

Skemanavn hjælper med at skelne et sæt tabeller fra et andet,

Hvis vi ikke bruger @Bord kommentar, vil enhedens navn blive betragtet som navnet på tabellen.

2.4. Det Kolonne Kommentar

Ligesom @Bord kommentar, vi kan bruge @Kolonne kommentar for at nævne detaljerne i en kolonne i tabellen.

Det @Kolonne kommentar har mange elementer såsom navn, længde, ugyldig og unik.

@Entity @Table (name = "STUDENT") offentlig klasse elev {@Id @GeneratedValue (strategi = GenerationType.AUTO) privat Lang id; @Column (name = "STUDENT_NAME", længde = 50, nullable = false, unik = false) privat strengnavn; // andre felter, getters og setter}

Det navn element angiver kolonnens navn i tabellen. Det længde element angiver længden. Det ugyldig element angiver, om kolonnen er ugyldig eller ej, og enestående element angiver, om kolonnen er unik.

Hvis vi ikke specificerer denne kommentar, betragtes feltets navn som kolonnens navn i tabellen.

2.5. Det Forbigående Kommentar

Nogle gange vil vi måske gør et felt ikke-vedvarende. Vi kan bruge @Transient kommentar til at gøre det. Det specificerer, at feltet ikke fortsætter.

For eksempel kan vi beregne en studerendes alder fra fødselsdatoen.

Så lad os kommentere feltet alder med @Transient kommentar:

@Entity @Table (name = "STUDENT") offentlig klasse elev {@Id @GeneratedValue (strategi = GenerationType.AUTO) privat Lang id; @Column (name = "STUDENT_NAME", længde = 50, nullable = false) privat strengnavn; @Transient privat heltalealder; // andre felter, getters og setter}

Som et resultat, marken alder vil ikke blive vedvarende til bordet.

2.6. Det Temporal Kommentar

I nogle tilfælde kan det være nødvendigt at gemme tidsmæssige værdier i vores tabel.

Til dette har vi @Temporal kommentar:

@Entity @Table (name = "STUDENT") offentlig klasse elev {@Id @GeneratedValue (strategi = GenerationType.AUTO) privat Lang id; @Column (name = "STUDENT_NAME", længde = 50, nullable = false, unik = false) privat strengnavn; @ Transient privat heltalealder; @Temporal (TemporalType.DATE) privat Dato fødselsdato; // andre felter, getters og setter}

Men med JPA 2.2 har vi også støtte til java.time.LocalDate, java.time.LocalTime, java.time.LocalDateTime, java.time.OffsetTime og java.time.OffsetDateTime.

2.7. Det Opregnet Kommentar

Nogle gange vil vi muligvis fortsætte en Java enum type.

Vi kan bruge @Enumereret kommentar for at specificere, om enum skal vedholdes ved navn eller efter ordinal (standard).

offentlig enum Køn {MALE, FEMALE} 
@Entity @Table (name = "STUDENT") offentlig klasse elev {@Id @GeneratedValue (strategi = GenerationType.AUTO) privat Lang id; @Column (name = "STUDENT_NAME", længde = 50, nullable = false, unik = false) privat strengnavn; @Transient privat heltalealder; @Temporal (TemporalType.DATE) privat Dato fødselsdato; @Enumerated (EnumType.STRING) privat køn køn; // andre felter, getters og setter}

Rent faktisk, vi behøver ikke at specificere @Enumereret kommentar overhovedet, hvis vi vil fortsætte Køn ved enum'S ordinær.

Men at fortsætte Køn ved enum navn, vi har konfigureret kommentaren med EnumType.STRING.

3. Konklusion

I denne artikel lærte vi, hvad JPA-enheder er, og hvordan man opretter dem. Vi lærte også om de forskellige kommentarer, der kan bruges til at tilpasse enheden yderligere.

Den komplette kode til denne artikel kan findes på Github.