Definere JPA-enheter

1. Introduksjon

I denne opplæringen lærer vi om det grunnleggende om enheter sammen med forskjellige merknader som definerer og tilpasser en enhet i JPA.

2. Enhet

Enheter i JPA er ikke annet enn POJOer som representerer data som kan videreføres til databasen. En enhet representerer en tabell som er lagret i en database. Hver forekomst av en enhet representerer en rad i tabellen.

2.1. De Enhet Kommentar

La oss si at vi har en POJO som heter Student som representerer dataene til en student, og vi vil lagre dem i databasen.

offentlig klasse Student {// felt, getters og setters}

For å gjøre dette, bør vi definere en enhet slik at JPA er klar over det.

Så la oss definere det ved å bruke @Enhet kommentar. Vi må spesifisere denne merknaden på klassenivå. Vi må også sørge for at enheten har en ikke-arg konstruktør og en primærnøkkel:

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

Enhetsnavnet er som standard navnet på klassen. Vi kan endre navnet ved hjelp av Navn element.

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

Fordi forskjellige JPA-implementeringer vil prøve å underklasse enheten vår for å gi funksjonaliteten deres, enhetsklasser må ikke deklareres endelig.

2.2. De Id Kommentar

Hver JPA-enhet må ha en primærnøkkel som unikt identifiserer den. De @Id kommentar definerer primærnøkkelen. Vi kan generere identifikatorene på forskjellige måter som er spesifisert av @GeneratedValue kommentar.

Vi kan velge mellom fire id-generasjonsstrategier med strategi element. Verdien kan være AUTO, BORD, SEKVENS, eller IDENTITET.

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

Hvis vi spesifiserer GenerationType.AUTO, vil JPA-leverandøren bruke hvilken som helst strategi den vil generere identifikatorene.

Hvis vi kommenterer enhetens felt, vil JPA-leverandøren bruke disse feltene for å hente og angi enhetens tilstand. I tillegg til feltadgang kan vi også gjøre tilgang til eiendom eller blandet tilgang, som gjør det mulig for oss å bruke både felt- og eiendomstilgang i samme enhet.

2.3. De Bord Kommentar

I de fleste tilfeller, navnet på tabellen i databasen og navnet på enheten vil ikke være det samme.

I disse tilfellene kan vi spesifisere tabellnavnet ved hjelp av @Bord kommentar:

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

Vi kan også nevne skjemaet ved hjelp av skjema element:

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

Skjema navn hjelper til med å skille ett sett med bord fra et annet,

Hvis vi ikke bruker @Bord merknad, vil navnet på enheten bli betraktet som navnet på tabellen.

2.4. De Kolonne Kommentar

Akkurat som @Bord kommentar, kan vi bruke @Kolonne kommentar for å nevne detaljene i en kolonne i tabellen.

De @Kolonne kommentar har mange elementer som navn, lengde, ugyldig og unik.

@Entity @Table (name = "STUDENT") offentlig klasse Student {@Id @GeneratedValue (strategi = GenerationType.AUTO) privat Lang id; @Column (name = "STUDENT_NAME", length = 50, nullable = false, unique = false) private Strengnavn; // andre felt, getters og setters}

De Navn element spesifiserer navnet på kolonnen i tabellen. De lengde element spesifiserer lengden. De ugyldig element angir om kolonnen er null eller ikke, og unik element angir om kolonnen er unik.

Hvis vi ikke spesifiserer denne merknaden, vil navnet på feltet bli betraktet som navnet på kolonnen i tabellen.

2.5. De Flyktig Kommentar

Noen ganger vil vi kanskje gjør et felt ikke-vedvarende. Vi kan bruke @Flyktig kommentar for å gjøre det. Den spesifiserer at feltet ikke vil bestå.

For eksempel kan vi beregne alderen til en student fra fødselsdatoen.

Så la oss kommentere feltet alder med @Flyktig kommentar:

@Entity @Table (name = "STUDENT") offentlig klasse Student {@Id @GeneratedValue (strategi = GenerationType.AUTO) privat Lang id; @Column (name = "STUDENT_NAME", length = 50, nullable = false) private Strengnavn; @ Transient private Integer age; // andre felt, getters og setters}

Som et resultat, feltet alder vil ikke bli vedvarende til bordet.

2.6. De Temporal Kommentar

I noen tilfeller kan det hende vi må lagre tidsverdier i tabellen vår.

For dette har vi @Temporal kommentar:

@Entity @Table (name = "STUDENT") offentlig klasse Student {@Id @GeneratedValue (strategi = GenerationType.AUTO) privat Lang id; @Column (name = "STUDENT_NAME", length = 50, nullable = false, unique = false) private Strengnavn; @ Transient private Integer age; @Temporal (TemporalType.DATE) private Fødselsdato; // andre felt, getters og setters}

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

2.7. De Oppregnet Kommentar

Noen ganger kan det være lurt å vedvare en Java enum type.

Vi kan bruke @Nummerert kommentar for å spesifisere om enum skal bestå av navn eller ordinær (standard).

offentlig enum Kjønn {MALE, FEMALE} 
@Entity @Table (name = "STUDENT") offentlig klasse Student {@Id @GeneratedValue (strategi = GenerationType.AUTO) privat Lang id; @Column (name = "STUDENT_NAME", length = 50, nullable = false, unique = false) private Strengnavn; @ Transient private Integer age; @Temporal (TemporalType.DATE) private Fødselsdato; @Enumerated (EnumType.STRING) privat Kjønn kjønn; // andre felt, getters og setters}

Faktisk, vi trenger ikke å spesifisere @Nummerert kommentar i det hele tatt hvis vi skal fortsette Kjønn ved enum‘S ordinal.

Imidlertid å vedvare Kjønn av enum navn, vi har konfigurert kommentaren med EnumType.STRING.

3. Konklusjon

I denne artikkelen lærte vi hva JPA-enheter er og hvordan vi kan lage dem. Vi lærte også om de forskjellige kommentarene som kan brukes til å tilpasse enheten ytterligere.

Den komplette koden for denne artikkelen finner du på Github.