Spring JPA @Embedded und @EmbeddedId

1. Übersicht

In diesem Lernprogramm werden wir die Verwendung der Annotation @EmbeddedId und der Methode " findBy " zum Abfragen einer auf einem zusammengesetzten Schlüssel basierenden JPA-Entität behandeln.

Daher verwenden wir die Anmerkungen @EmbeddeId und @ Embeddable , um zusammengesetzte Schlüssel in JPA-Entitäten darzustellen . Wir müssen auch Spring JpaRepository verwenden , um unser Ziel zu erreichen.

Wir konzentrieren uns auf die Abfrage von Objekten nach einem partiellen Primärschlüssel.

2. Benötigen Sie @Embeddable und @EmbeddedId

In der Software stoßen wir auf viele Anwendungsfälle, wenn wir einen zusammengesetzten Primärschlüssel benötigen, um einen Eintrag in einer Tabelle zu definieren. Zusammengesetzte Primärschlüssel sind Schlüssel, die mehr als eine Spalte verwenden, um eine Zeile in der Tabelle eindeutig zu identifizieren .

Wir stellen einen zusammengesetzten Primärschlüssel in Spring Data dar, indem wir die Annotation @Embeddable für eine Klasse verwenden. Dieser Schlüssel wird dann als zusammengesetzter Primärschlüssel in die entsprechende Entitätsklasse der Tabelle eingebettet, indem die Annotation @EmbeddedId für ein Feld vom Typ @Embeddable verwendet wird.

3. Beispiel

Betrachten wir ein Buch Tisch, wo ein Buch Datensatz einen zusammengesetzten Primärschlüssel aus hat Autor und Namen . Manchmal möchten wir vielleicht Bücher anhand eines Teils des Primärschlüssels finden. Beispielsweise möchte ein Benutzer möglicherweise nur nach Büchern eines bestimmten Autors suchen . Wir werden lernen, wie man das mit JPA macht.

Unsere Hauptanwendung besteht aus einer @Embeddable BookId und einem @Entity Book mit @EmbeddedId BookId.

3.1. @Embeddable

Definieren wir in diesem Abschnitt unsere BookId- Klasse. Der Autor und der Name geben eine eindeutige BookId an. Die Klasse ist serialisierbar und implementiert die Methoden equals und hashCode :

@Embeddable public class BookId implements Serializable { private String author; private String name; // standard getters and setters }

3.2. @Entity und @EmbeddedId

Unser Buch Einheit hat @EmbeddedId BookID und andere zu einem verwandten Bereichen Buch . BookId teilt JPA mit, dass die Book- Entität einen zusammengesetzten Schlüssel hat:

@Entity public class Book { @EmbeddedId private BookId id; private String genre; private Integer price; //standard getters and setters }

3.3. JPA-Repository und Methodenbenennung

Lassen Sie uns schnell unsere JPA-Repository-Schnittstelle definieren, indem wir das JpaRepository um die Entität Book sowie BookId erweitern :

@Repository public interface BookRepository extends JpaRepository { List findByIdName(String name); List findByIdAuthor(String author); }

Wir verwenden einen Teil der Feldnamen der ID- Variablen, um unsere Spring Data-Abfragemethoden abzuleiten. Daher interpretiert JPA die partielle Primärschlüsselabfrage wie folgt:

findByIdName -> directive "findBy" field "id.name" findByIdAuthor -> directive "findBy" field "id.author"

4. Fazit

Mit JPA können zusammengesetzte Schlüssel effizient zugeordnet und über abgeleitete Abfragen abgefragt werden.

In diesem Artikel haben wir ein kleines Beispiel für die Durchführung einer Teil-ID-Feldsuche gesehen. Wir haben uns die Annotation @Embeddable angesehen , um den zusammengesetzten Primärschlüssel darzustellen, und die Annotation @EmbeddedId , um einen zusammengesetzten Schlüssel in eine Entität einzufügen.

Schließlich haben wir gesehen, wie die von JpaRepository findBy abgeleiteten Methoden zum Suchen mit partiellen ID-Feldern verwendet werden.

Wie immer ist der Beispielcode für dieses Tutorial auf GitHub verfügbar.