Аннотации запросов в Spring Data Jpa

Spring Data Jpa предоставляет аннотации, которыми можно…задавать собственные запросы. Да да, ещё один метод ????

Код примеров ниже основан на коде из статьи Hello, Spring Data JPA

@Query

Аннотация @Query позволяет добавить свой собственный JPQL запрос.

@Query("select p from Passport p where p.owner.lastName like ?1%")
Iterable<Passport> ownerStartsWith(String name);

В запросах можно использовать и именованные параметры, хотя и с несколько неуклюжим синтаксисом:

@Query("select p from Passport p where p.owner.lastName = :name")
Iterable<Passport> findByOwner(@Param("name") String name);

Spring Expression Language

А ещё в @Query можно использовать выражения и подстановки SpEL:

@Query("select p from Person p where p.passport.series = :#{#passport.series}")
Iterable<Person> personWithPasportSeries(@Param("passport") Passport series);

Spring Data Jpa добавляет свою собственную переменную, #{#entityName}, которая разворачивается в имя сущности, которой типизирован репозиторий.

Query hints

Используя аннотацию @QueryHints можно добавлять Jpa query hints (и hibernate query hints и вообще любые query hints любых реализаций) к любому запросу:

@QueryHints(@QueryHint(name = "org.hibernate.readOnly", value = "true"))
@Query("select p from Passport p where p.owner.lastName = :name")
Iterable<Passport> findByOwner(@Param("name") String name);

Скачать код примера

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *