Начал изучать 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 и нам нужно написать какой то один непопулярный запрос, который допустим будет использован всего один раз во всем проекте. Тогда именованный запрос явно не подходит. В таком случае надо написать названия запроса в нашем репозитории и реализовать его уже в классе Сервиса? Верно, или как-то по другому тут делают.