Что использовать: JPQL или критерии API?



мое приложение Java использует JPA для сохранения объекта. Бизнес-домен очень прост (всего три класса являются постоянными, с 3-5 свойствами в каждом). Запросы также просты. Вопрос в том, какой подход я должен использовать: JPQL или критерии API?

608   3  

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 критериев, но хорошо, что он существует для в те редкие времена это требуется.

надеюсь, что это помогает.

Я думаю, что вы также можете рассмотреть некоторые другие новые рамки, такие как:

Запрос Dsl

Объект Запроса

Торпедо Запрос

Это дает вам тип безопасный и умный способ построения запросов, не являются стандартными, но я совершенно уверен, что следующий стандарт будет основан на одной из этих технологий.

Если вы хотите остаться на стандартах игнорировать это.

тю

Comments

    Ничего не найдено.