JPA-entiteiten definiëren

1. Inleiding

In deze zelfstudie leren we over de basisprincipes van entiteiten, samen met verschillende annotaties die een entiteit in JPA definiëren en aanpassen.

2. Entiteit

Entiteiten in JPA zijn niets anders dan POJO's die gegevens vertegenwoordigen die in de database kunnen worden bewaard. Een entiteit vertegenwoordigt een tabel die is opgeslagen in een database. Elke instantie van een entiteit vertegenwoordigt een rij in de tabel.

2.1. De Entiteit Annotatie

Laten we zeggen dat we een POJO hebben gebeld Leerling dat staat voor de gegevens van een student en we willen deze graag in de database opslaan.

openbare klas Student {// velden, getters en setters}

Om dit te kunnen doen, moeten we een entiteit definiëren zodat de PPV hiervan op de hoogte is.

Dus laten we het definiëren door gebruik te maken van de @Entiteit annotatie. We moeten deze annotatie specificeren op klassenniveau. We moeten er ook voor zorgen dat de entiteit een constructor zonder argumenten en een primaire sleutel heeft:

@Entity openbare klas Student {// velden, getters en setters}

De naam van de entiteit is standaard de naam van de klasse. We kunnen de naam wijzigen met de naam element.

@Entity (name = "student") openbare klas Student {// velden, getters en setters}

Omdat verschillende JPA-implementaties zullen proberen onze entiteit onder te verdelen om hun functionaliteit te bieden, entiteitsklassen mogen niet worden gedeclareerd laatste.

2.2. De ID kaart Annotatie

Elke PPV-entiteit moet een primaire sleutel hebben die deze uniek identificeert. De @ID kaart annotatie definieert de primaire sleutel. We kunnen de ID's op verschillende manieren genereren die worden gespecificeerd door de @GeneratedValue annotatie.

We kunnen kiezen uit vier strategieën voor het genereren van id's met de strategie element. De waarde kan zijn AUTO, TABEL, VOLGORDE, of IDENTITEIT.

@Entity openbare klasse Student {@Id @GeneratedValue (strategy = GenerationType.AUTO) privé Lange id; private String naam; // getters en setters}

Als we specificeren GenerationType.AUTO, zal de PPV-provider elke strategie gebruiken die hij wil om de ID's te genereren.

Als we de velden van de entiteit annoteren, gebruikt de JPA-provider deze velden om de status van de entiteit op te halen en in te stellen. Naast Field Access kunnen we ook Property Access of Mixed Access doen, waardoor we zowel veld- als property-toegang in dezelfde entiteit kunnen gebruiken.

2.3. De Tafel Annotatie

In de meeste gevallen, de naam van de tabel in de database en de naam van de entiteit zullen niet hetzelfde zijn.

In deze gevallen kunnen we de tabelnaam specificeren met de @Tafel annotatie:

@Entity @Table (name = "STUDENT") openbare klas Student {// velden, getters en setters}

We kunnen het schema ook vermelden met de schema element:

@Entity @Table (name = "STUDENT", schema = "SCHOOL") openbare klas Student {// velden, getters en setters}

Schemanaam helpt om de ene set tabellen van de andere te onderscheiden,

Als we de @Tafel annotatie, wordt de naam van de entiteit beschouwd als de naam van de tabel.

2.4. De Kolom Annotatie

Net als de @Tafel annotatie kunnen we de @Kolom annotatie om de details van een kolom in de tabel te vermelden.

De @Kolom annotatie heeft veel elementen, zoals naam, lengte, nullable en uniek.

@Entity @Table (name = "STUDENT") openbare klas Student {@Id @GeneratedValue (strategie = GenerationType.AUTO) privé Lange id; @Column (name = "STUDENT_NAME", lengte = 50, nullable = false, uniek = false) private String naam; // andere velden, getters en setters}

De naam element specificeert de naam van de kolom in de tabel. De lengte element specificeert zijn lengte. De ongeldig element specificeert of de kolom al dan niet nullabel is, en de uniek element specificeert of de kolom uniek is.

Als we deze annotatie niet specificeren, wordt de naam van het veld beschouwd als de naam van de kolom in de tabel.

2.5. De Van voorbijgaande aard Annotatie

Soms willen we dat misschien maak een veld niet-persistent. We kunnen de @Transient annotatie om dit te doen. Het specificeert dat het veld niet zal worden bewaard.

We kunnen bijvoorbeeld de leeftijd van een student berekenen vanaf de geboortedatum.

Dus laten we het veld annoteren leeftijd met de @Transient annotatie:

@Entity @Table (name = "STUDENT") openbare klas Student {@Id @GeneratedValue (strategie = GenerationType.AUTO) privé Lange id; @Column (name = "STUDENT_NAME", lengte = 50, nullable = false) private String naam; @Transient privé Integer leeftijd; // andere velden, getters en setters}

Als gevolg hiervan is het veld leeftijd zal niet worden volgehouden aan de tafel.

2.6. De Tijdelijk Annotatie

In sommige gevallen moeten we tijdelijke waarden in onze tabel opslaan.

Hiervoor hebben we de @Tijdelijk annotatie:

@Entity @Table (name = "STUDENT") openbare klas Student {@Id @GeneratedValue (strategie = GenerationType.AUTO) privé Lange id; @Column (name = "STUDENT_NAME", lengte = 50, nullable = false, uniek = false) private String naam; @Transient privé Integer leeftijd; @Temporal (TemporalType.DATE) privé Geboortedatum; // andere velden, getters en setters}

Met JPA 2.2 hebben we echter ook ondersteuning voor java.time.LocalDate, java.time.LocalTime, java.time.LocalDateTime, java.time.OffsetTime en java.time.OffsetDateTime.

2.7. De Opgesomd Annotatie

Soms willen we misschien een Java behouden opsomming type.

We kunnen de @Genummerd annotatie om aan te geven of het opsomming moet worden bewaard op naam of op rangtelwoord (standaard).

openbare opsomming Geslacht {MALE, FEMALE} 
@Entity @Table (name = "STUDENT") openbare klas Student {@Id @GeneratedValue (strategie = GenerationType.AUTO) privé Lange id; @Column (name = "STUDENT_NAME", lengte = 50, nullable = false, uniek = false) private String naam; @Transient privé Integer leeftijd; @Temporal (TemporalType.DATE) privé Geboortedatum; @Enumerated (EnumType.STRING) privé Geslacht geslacht; // andere velden, getters en setters}

Werkelijk, we hoeven het @Genummerd annotatie helemaal als we de Geslacht Door de opsomming‘S rangtelwoord.

Om het Geslacht door opsomming naam, we hebben de annotatie geconfigureerd met EnumType.STRING.

3. Conclusie

In dit artikel hebben we geleerd wat JPA-entiteiten zijn en hoe u deze kunt maken. We hebben ook geleerd over de verschillende annotaties die kunnen worden gebruikt om de entiteit verder aan te passen.

De volledige code voor dit artikel is te vinden op Github.