Я очень смущен тем, когда и когда не использовать собственные запросы в JPA 2.0. У меня создалось впечатление, что использование собственных запросов может заставить меня выйти из синхронизации с кешем JPA. Если я могу выполнить одно и то же с помощью запроса JPQL или CriteriaBuilder, есть ли веская причина использовать собственный запрос? Точно так же существует ли опасность использования собственного запроса, если я могу выполнить одно и то же с JPQL или CriteriaBuilder? И, наконец, если существует опасность использования собственного запроса в случае выхода из синхронизации с кэшем JPA, будет ли существовать такая же опасность при выполнении эквивалентного запроса с помощью JPQL или CriteriaBuilder?Когда человек должен использовать собственные запросы с JPA 2.0 вместо JPQL или CriteriaBuilder?
Моя философия избегала родных запросов, но наверняка бывают моменты, когда они необходимы. Мне кажется, что если я смогу это сделать с помощью JPQL или CriteriaBuilder, тогда я должен это сделать.
Спасибо.
Замечательное объяснение @JB Nizet как всегда. Вопрос также задает вопрос о построении критериев. Я понимаю, что запросы Criteria полезны для поддержания безопасности типов (что JPQL не предоставляет, как указано в вашем ответе). Тем не менее, я лично считаю API критериев очень громоздким и трудночитаемым. Существуют ли другие преимущества API Критерии над JPQL? – HopeKing
Я также нахожу этот API очень громоздким и неинтуитивным для использования и труднее читать. Я использую этот API только в том случае, когда мне нужно составлять запрос динамически на основе ... критериев (отсюда и название API). Например, когда пользователь отправляет форму поиска с несколькими необязательными критериями (имя, имя, минимальная дата, максимальная дата рождения и т. Д.), Различные элементы предложения должны быть добавлены или нет в зависимости от наличия или отсутствия этих критериев. –
К пункту и очень ясно. Благодарю. – HopeKing