В спящем режиме, назвал запросы HQL (в аннотациях) оптимизированными?

Новый коллега только что предложил использовать названный запросами HQL в, в спящем режиме с аннотациями (т.е. @NamedQuery) вместо того, чтобы встроить HQL в наши классы XxxxRepository.

То, что я хотел бы знать, - обеспечивает ли использование аннотации какое-либо преимущество за исключением централизации запросов?

В частности, есть ли некоторое усиление действий, например, потому что запрос только анализируется однажды, когда класс загружается, а не каждый раз, когда метод Репозитория выполняется?

6
задан marc_s 3 March 2016 в 08:08
поделиться

2 ответа

из Pro EJB 3 (Майк Кейт):

«... мы рекомендуем, когда это возможно, именованные запросы. Поставщики сохраняемости часто предпринимают шаги для предварительной компиляции JPQL именованные запросы к SQL как часть фазы развертывания или инициализации приложения »

. Хотя эта книга посвящена JPA, общие советы применимы и к Hibernate. Однако, поскольку кеши Hibernate анализируют HQL / JPQL, вы, вероятно, не увидите большого прироста производительности. Еще одно преимущество использования именованных запросов состоит в том, что это дает вам возможность переопределить запрос с использованием файла сопоставления во время развертывания без необходимости перестраивать приложение; полезно, если вам нужно настроить запрос в производственной среде.

8
ответ дан 8 December 2019 в 12:58
поделиться

Помимо возможного прироста производительности, я считаю, что еще одним преимуществом будет то, что, используя HQL-запросы с аннотациями, вы можете защитить себя от атак SQL Injection.

Для веб-приложения это важно, если запрос содержит какие-либо данные, вводимые пользователем.

http://en.wikipedia.org/wiki/SQL_injection

5
ответ дан 8 December 2019 в 12:58
поделиться
Другие вопросы по тегам:

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