Я согласен с вашей философией.
Основная проблема с нативными запросами, ИМХО, заключается в удобстве обслуживания. Прежде всего, они, как правило, более сложны и длиннее, чем запросы JPQL. Но они также жестко кодируют имена таблиц и столбцов, а не используют имена классов и свойств.
Запросы JPQL уже проблематичны при рефакторинге, поскольку они жестко кодируют имена классов и свойств в строках. Но нативные запросы еще хуже, потому что они жестко кодируют имена таблиц и столбцов везде.
Я не думаю, что собственные запросы выбора являются проблемой, связанной с кешем. Тем не менее, собственные запросы на обновление, вставку и удаление являются проблемой, поскольку они изменяют данные за задним краем кэша первого и второго уровня. Так что они могут устареть.
Другая проблема состоит в том, что ваши собственные запросы могут использовать синтаксис, который распознается одной базой данных, но не другой, что затрудняет миграцию приложения из одной базы данных в другую.