Depois de tantos anos nessa indústria vital… Eu posso dizer que depende.
Foi-se o tempo em que eu defenderia hibernate/JPA/ORM com unhas e dentes para todos os projetos, grandes ou pequenos. E foi-se, também, o tempo de defender o JDBC puro e roots com total veemência.
Hoje eu sigo a filosofia do quanto você vai aproveitar a ferramenta.
Se vai usar hibernate/JPA/ORM, faça-o a ponto de ter o máximo de aproveitamento de todas as suas funcionalidades. Com exceção do nativeQuery, obviamente.
Se é para usar nativeQuery, vai de jdbcTemplate (Spring). Ou vai de JDBC puro, mesmo.
Particularmente, eu tenho preferido usar jdbc puro. “Ah, mas se mudar o banco, você tá f0d1d0”. Ok, 10 anos trabalhando com desenvolvimento e quantas vezes mudou-se o banco no início/meio/fim do projeto? Ops, 0 vezes.
“Ah, mas hibernate/JPA facilitam muito a integração entre o java e o banco de dados”. Sim. Mas a complexidade em determinadas queries é tão alta que tem muita gente que não consegue usar nem hql, quem dirá jpql (até a versão 5, com a qual trabalhei, existia diferenças entre ambas) e o criteria/criteriabuilder (acho que é isso)? Nem comentarei sobre. E, então, o que resta, é o pessoal metendo nativeQuery em tudo. Aí o hibernate passa de solução para intermediário e qual o ganho nisso? Faz jdbc e faz as queries na mão.