Spring JPA @ Embedded og @ EmbeddedId

1. Oversigt

I denne vejledning skal vi dække brugen af @EmbeddedId kommentar og “findBy”Metode til forespørgsel på en sammensat nøglebaseret JPA-enhed.

Derfor vi bruger @EmbeddeId og @ Kan integreres kommentarer til at repræsentere sammensatte nøgler i JPA-enheder. Vi har også brug foråret JpaRepository for at nå vores mål.

Vi koncentrerer os om forespørgsel på objekter ved delvis primærnøgle.

2. Behov for @Embeddable og @EmbeddedId

I software støder vi på mange brugssager, når vi har brug for en sammensat primærnøgle til at definere en post i en tabel. Sammensatte primære nøgler er nøgler, der bruger mere end en kolonne til at identificere en række i tabellen entydigt.

Vi repræsenterer en sammensat primærnøgle i Spring Data ved hjælp af @Embeddable kommentar på en klasse. Denne nøgle indlejres derefter i tabellens tilsvarende enhedsklasse som den sammensatte primære nøgle ved hjælp af @EmbeddedId kommentar på et felt i @Embeddable type.

3. Eksempel

Overvej en Bestil tabel, hvor en Bestil post har en sammensat primærnøgle bestående af forfatter og navn. Nogle gange vil vi måske finde bøger ved en del af den primære nøgle. For eksempel vil en bruger muligvis kun søge efter bøger efter en bestemt forfatter. Vi lærer, hvordan du gør dette med JPA.

Vores primære applikation vil bestå af en @Embeddable BookId og @Entity Book med @EmbeddedId BookId.

3.1. @Embeddable

Lad os definere vores BookId klasse i dette afsnit. Det forfatter og navn angiver en unik BookId - klassen er Serialiserbar og implementerer begge dele lige med og hashCode metoder:

@Embeddable public class BookId implementer Serializable {private String author; privat strengnavn; // standard getters og setter}

3.2. @Enhed og @EmbeddedId

Vores Bestil enhed har @EmbeddedIdBookId og andre felter relateret til en Bestil. BookId fortæller JPA, at Bestil enhed har en sammensat nøgle:

@Entity public class Book {@EmbeddedId private BookId id; privat strenggenre; privat helpris; // standard getters og setter}

3.3. JPA Repository og Method Naming

Lad os hurtigt definere vores JPA-lagergrænseflade ved at udvide JpaRepository med enhed Bestil såvel som BookId:

@Repository offentlig grænseflade BookRepository udvider JpaRepository {List findByIdName (strengnavn); Liste findByIdAuthor (Stringforfatter); }

Vi bruger en del af id variabelens feltnavne for at udlede vores Spring Data-forespørgselsmetoder. Derfor fortolker JPA den delvise primære nøgleforespørgsel som:

findByIdName -> direktiv "findBy" felt "id.navn" findByIdAuthor -> direktiv "findBy" felt "id.author"

4. Konklusion

JPA kan bruges til effektivt at kortlægge sammensatte nøgler og spørge dem via afledte forespørgsler.

I denne artikel så vi et lille eksempel på at køre en delvis id-felt søgning. Vi kiggede på @Embeddable kommentar til at repræsentere den sammensatte primære nøgle og @EmbeddedId kommentar for at indsætte en sammensat nøgle i en enhed.

Endelig så vi, hvordan vi gjorde det brug JpaRepositoryfindBy afledte metoder for at søge med delvise id-felter.

Som altid er eksempelkoden til denne vejledning tilgængelig på GitHub.