@DeNissss4444

Где нужно реализовывать HQL запросы?

Начал изучать HQL под Спринг и сразу начали появляться вопросы :) Я читаю различные статьи про HQL и там приводят различные варианты кода, но где именно надо его реализовывать почему то не пишут. Я понимаю что многое и так понятно должно быть если ты знаешь основы Спринга, но я решил тут уточнить некоторые моменты что бы точно знать что я правильно понимаю как это все работает. И так наиболее подходящее для Спринга я так понял являются именованные запросы, так как их можно один раз написать и дальше просто вызывать?
Вот эту часть кода по логике надо писать в модели прям над названием класса?
@NamedQueries({
    @NamedQuery(
        name = "findCompaniesWithWorkerPassport",
        query = "Select c from Company as c, IN(c.workers) as w where w.passport.series = :series")
 
})


Теперь когда я хочу найти компании с паспортом работника, по логике я могу вызвать этот query и вызывать я его должен в классе Cервиса верно?
Java
session.getNamedQuery("findCompaniesWithWorkerPassport")
  .setParameter("series", "AS")
  .list()
  .forEach(System.out::println);


Так же возникает вопрос, если мы используем HQL и нам нужно написать какой то один непопулярный запрос, который допустим будет использован всего один раз во всем проекте. Тогда именованный запрос явно не подходит. В таком случае надо написать названия запроса в нашем репозитории и реализовать его уже в классе Сервиса? Верно, или как-то по другому тут делают.
  • Вопрос задан
  • 287 просмотров
Решения вопроса 1
azerphoenix
@azerphoenix Куратор тега Spring
Java Software Engineer
Ссылка на полезный источник: https://www.baeldung.com/hibernate-named-query

Вот эту часть кода по логике надо писать в модели прям над названием класса?

Да

Теперь когда я хочу найти компании с паспортом работника, по логике я могу вызвать этот query и вызывать я его должен в классе Cервиса верно?

Как вариант можно в сервисе. Обычно, да это делается в сервисном слое, но никто не запрещает проделывать вам это внутри контроллера или еще где-то.

Так же возникает вопрос, если мы используем HQL и нам нужно написать какой то один непопулярный запрос, который допустим будет использован всего один раз во всем проекте.

В Spring, используется не только HQL, но и Spring Data или Criteria API или же JPQL.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы