Spring JPA @Embedded en @EmbeddedId

1. Overzicht

In deze tutorial gaan we het gebruik van de @EmbeddedId annotatie en "findBy”Methode voor het opvragen van een op samengestelde sleutel gebaseerde PPV-entiteit.

Vandaar we zullen gebruiken @EmbeddeId en @ Insluitbaar annotaties om samengestelde sleutels in PPV-entiteiten weer te geven. We moeten ook de lente gebruiken JpaRepository om ons doel te bereiken.

We zullen ons concentreren op het opvragen van objecten door middel van een gedeeltelijke primaire sleutel.

2. Behoefte aan @Embeddable en @EmbeddedId

In software komen we veel use-cases tegen waarin we een samengestelde primaire sleutel nodig hebben om een ​​item in een tabel te definiëren. Samengestelde primaire sleutels zijn sleutels die meer dan één kolom gebruiken om een ​​rij in de tabel uniek te identificeren.

We vertegenwoordigen een samengestelde primaire sleutel in Spring Data door de @Embeddable annotatie bij een klas. Deze sleutel wordt vervolgens ingebed in de overeenkomstige entiteitsklasse van de tabel als de samengestelde primaire sleutel met behulp van de @EmbeddedId annotatie op een veld van de @Embeddable type.

3. Voorbeeld

Overweeg een boek tafel, waar een boek record heeft een samengestelde primaire sleutel bestaande uit schrijver en naam. Soms willen we misschien zoeken boeken door een deel van de primaire sleutel. Een gebruiker wil bijvoorbeeld misschien alleen naar boeken zoeken op basis van een bepaald schrijver. We zullen leren hoe u dit met JPA kunt doen.

Onze primaire applicatie zal bestaan ​​uit een @Embeddable BookId en @ Entity Book met @EmbeddedId BoekId.

3.1. @Embeddable

Laten we onze definiëren BoekId klasse in deze sectie. De schrijver en naam specificeert een uniek BoekId - de klas is Serialiseerbaar en implementeert beide is gelijk aan en hashCode methoden:

@Embeddable public class BookId implementeert Serializable {private String author; private String naam; // standaard getters en setters}

3.2. @Entiteit en @EmbeddedId

Onze Boek entiteit heeft @EmbeddedIdBoekId en andere velden gerelateerd aan een boek. BoekId vertelt JPA dat het Boek entiteit heeft een samengestelde sleutel:

@Entity openbare klasse Book {@EmbeddedId privé BookId-id; privé String-genre; private Integer prijs; // standaard getters en setters}

3.3. JPA-repository en methodbenaming

Laten we snel onze JPA-repository-interface definiëren door het JpaRepository met entiteit Boek net zoals BoekId:

@Repository openbare interface BookRepository breidt JpaRepository {List findByIdName (String naam) uit; List findByIdAuthor (String auteur); }

We gebruiken een deel van de ID kaart veldnamen van variabelen om onze Spring Data-querymethoden af ​​te leiden. Daarom interpreteert JPA de gedeeltelijke primaire sleutelvraag als:

findByIdName -> richtlijn "findBy" veld "id.name" findByIdAuthor -> richtlijn "findBy" veld "id.author"

4. Conclusie

JPA kan worden gebruikt om samengestelde sleutels efficiënt in kaart te brengen en deze via afgeleide queries te doorzoeken.

In dit artikel hebben we een klein voorbeeld gezien van het uitvoeren van een gedeeltelijke zoekopdracht in het id-veld. We keken naar de @Embeddable annotatie om de samengestelde primaire sleutel en de @EmbeddedId annotatie om een ​​samengestelde sleutel in een entiteit in te voegen.

Eindelijk hebben we gezien hoe gebruik de JpaRepositoryfindBy afgeleide methoden om te zoeken met gedeeltelijke id-velden.

Zoals altijd is de voorbeeldcode voor deze tutorial beschikbaar op GitHub.


$config[zx-auto] not found$config[zx-overlay] not found