3 ответов:
Я уверен, что это уже было рассмотрено здесь, но я не мог найти существующий вопрос. Итак, вот моя точка зрения на вопрос:
- Я считаю, что запросы JPQL легче писать / читать.
- Я нахожу API критериев хорошим для построения динамических запросов.
который является в основном то, что вы найдете в Hibernate: критерии против HQL.
но есть одно существенное различие между API критериев JPA 2.0 и API критериев Hibernate, который стоит упомянуть: API критериев JPA 2.0 - это typesafe API и таким образом дает проверки времени компиляции, завершение кода, лучшую поддержку рефакторинга и т. д. Однако,Я не находите, что преимущества перевешивают простоту использования JPQL.
подводя итог, я бы предпочел JPQL, за исключением динамических запросов (например, для функций поиска по нескольким критериям).
обзоры вопросы
Я ответил на аналогичный вопрос ранее, и я повторно опубликую свой ответ здесь в интересах сообщества. Я собираюсь предположить, что вы используете сервер приложений vis-a-vis мой ответ ниже.
API критериев существует, чтобы обеспечить построение динамических SQL-запросов безопасным для типа способом, который предотвращает внедрение SQL. В противном случае вы бы объединяли строки SQL вместе, что является как подверженным ошибкам, так и риском для безопасности: т. е. SQL-инъекция. Это было бы единственным время, когда вы хотите использовать API критериев.
Если запрос остается в основном тем же самым, но нужно только принимать разные параметры, вы должны использовать аннотированные @NamedQueries, которые проще, предварительно скомпилированы, могут быть кэшированы во вторичном кэше и, возможно, проверены во время запуска сервера.
Это в основном эмпирическое правило относительно запросов критериев по сравнению с @NamedQueries. По моему опыту редко требуется API критериев, но хорошо, что он существует для в те редкие времена это требуется.
надеюсь, что это помогает.
Я думаю, что вы также можете рассмотреть некоторые другие новые рамки, такие как:
Это дает вам тип безопасный и умный способ построения запросов, не являются стандартными, но я совершенно уверен, что следующий стандарт будет основан на одной из этих технологий.
Если вы хотите остаться на стандартах игнорировать это.
тю
Comments