1+ package spring .oldboy .database .repository .company_repository ;
2+
3+ /*
4+ Part 10: Lesson 50: применение явных запросов с аннотацией @Query,
5+ см. DOC/SpringDataJPATutorial/7_QueriesWithAnnotation.txt
6+ */
7+
8+ import org .springframework .data .jpa .repository .JpaRepository ;
9+ import org .springframework .data .jpa .repository .Query ;
10+ import spring .oldboy .database .entity .Company ;
11+
12+ import java .util .List ;
13+ import java .util .Optional ;
14+
15+ public interface SecondCompanyRepository extends JpaRepository <Company , Integer > {
16+
17+ /*
18+ Part 10: Lesson 50:
19+
20+ Как уже было сказано ранее, недостаток именованных запросов в том,
21+ что мы не можем увидеть вызванный запрос к базе данных из интерфейса
22+ репозитория.
23+
24+ Одним из вариантов устранения этого недостатка может быть аннотирование
25+ с явным указанием имени запроса:
26+
27+ @Query(name = "Company.findCompanyByName")
28+
29+ Либо еще более явно и приоритетно по сравнению с именованными запросами
30+ и запросами сгенерированными на основе их имени будет явное написание
31+ запроса в теле аннотации. Используем HQL и оперируем уже сущностями.
32+
33+ Преимущества в простоте, тут мы можем подтянуть fetch сущности, в нашем
34+ случае locales
35+ */
36+ @ Query ("select c from Company c " +
37+ "join fetch c.locales cl " +
38+ "where c.name = :name" )
39+ Optional <Company > findCompanyByName (String name );
40+
41+ /*
42+ В случае возврата более одного результата мы можем возвращать:
43+ Collection, Stream (batch, close)
44+ см. DOC/SpringDataJPATutorial/5_IntroductionQueryMethods.txt
45+
46+ В данном случае Containing - … where x.name like ?1 (параметр
47+ завернутый в %), а IgnoreCase вытекает из названия - регистр не
48+ имеет значения.
49+ */
50+ List <Company > findAllByNameContainingIgnoreCase (String fragment );
51+
52+ }
0 commit comments