Рубрики
Без рубрики

Spring JPA @Embedded и @Embedded

Узнайте, как использовать аннотации @Embedded и @Embeddable для представления составных ключей в сущностях JPA.

Автор оригинала: baeldung.

1. Обзор

В этом уроке мы рассмотрим использование аннотации @EmbeddedId и метода ” findBy ” для запроса объекта JPA на основе составного ключа.

Следовательно, мы будем использовать @Embedded и @ |/Embeddable аннотации для представления составных ключей в сущностях JPA . Нам также необходимо использовать Spring JpaRepository для достижения нашей цели.

Мы сосредоточимся на запросе объектов по частичному первичному ключу.

2. Потребность в @Embeddable и @Embedded

В программном обеспечении мы сталкиваемся со многими случаями использования, когда нам нужен составной первичный ключ для определения записи в таблице. Составные первичные ключи-это ключи, которые используют более одного столбца для уникальной идентификации строки в таблице .

Мы представляем составной первичный ключ в данных Spring с помощью аннотации @Embeddable для класса. Этот ключ затем внедряется в соответствующий класс сущностей таблицы в качестве составного первичного ключа с помощью аннотации @EmbeddedId в поле типа @Embeddable .

3. Пример

Рассмотрим таблицу book , где запись book имеет составной первичный ключ, состоящий из author и name . Иногда мы можем захотеть найти книги по части первичного ключа. Например, пользователь может захотеть искать книги только по определенному автору . Мы узнаем, как это сделать с JPA.

Наше основное приложение будет состоять из @Embeddable BookID и @Entity Book с @EmbeddedId BookID.

3.1. @Встраиваемый

Давайте определим наш класс BookID в этом разделе. В author и name будет указан уникальный BookID — класс Сериализуемый и реализует оба равных и хэш-кода методов:

@Embeddable
public class BookId implements Serializable {

    private String author;
    private String name;

    // standard getters and setters
}

3.2. @Entity и @EmbeddedId

Наша Книга сущность имеет @EmbeddedId |/BookID и другие поля, связанные с книгой . BookID сообщает JPA, что сущность Book имеет составной ключ:

@Entity
public class Book {

    @EmbeddedId
    private BookId id;
    private String genre;
    private Integer price;

    //standard getters and setters
}

3.3. Репозиторий JPA и именование методов

Давайте быстро определим наш интерфейс репозитория JPA, расширив JpaRepository с сущностью Book , а также BookID :

@Repository
public interface BookRepository extends JpaRepository {

    List findByIdName(String name);

    List findByIdAuthor(String author);
}

Мы используем часть имен полей переменной id для получения наших методов запроса данных Spring. Следовательно, JPA интерпретирует запрос частичного первичного ключа как:

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

4. Заключение

JPA можно использовать для эффективного сопоставления составных ключей и запроса их с помощью производных запросов.

В этой статье мы увидели небольшой пример выполнения частичного поиска по полю идентификатора. Мы рассмотрели аннотацию @Embeddable для представления составного первичного ключа и аннотацию @EmbeddedId для вставки составного ключа в сущность.

Наконец, мы увидели, как использовать JpaRepository |/findBy производные методы для поиска с частичными полями идентификаторов.

Как всегда, пример кода для этого урока доступен на GitHub .