Вопрос проверяет понимание ограничений JPA и умение выбирать подходящий инструмент для работы с базой данных.
Native SQL-запросы используются, когда возможностей JPA или JPQL недостаточно. Они позволяют писать чистый SQL с учетом особенностей конкретной базы данных. Такой подход даёт больше контроля, но снижает переносимость кода. Используется осознанно и точечно.
Несмотря на удобство JPA, иногда требуется полный контроль над SQL-запросом.
Определение:
Native SQL — это запрос, написанный на «чистом» SQL, который выполняется напрямую базой данных, минуя абстракции JPA.
Native SQL используют, если:
требуется сложный JOIN или подзапрос
используется специфичный синтаксис БД
важна максимальная производительность
нужно работать с window-функциями или CTE
@Query(
value = "SELECT * FROM users WHERE status = :status",
nativeQuery = true
)
List<User> findByStatus(@Param("status") String status);
Использование native SQL:
привязывает код к конкретной СУБД
усложняет тестирование
снижает читаемость по сравнению с JPA
Native SQL-запросы — это инструмент для сложных и нестандартных случаев. В обычных CRUD-сценариях предпочтительнее использовать JPA и derived query methods.