Estoy muy confundido acerca de cuándo y cuándo no utilizar consultas nativas en JPA 2.0. Tenía la impresión de que el uso de consultas nativas podría hacer que no se sincronizara con el caché JPA. Si puedo lograr lo mismo con una consulta JPQL o CriteriaBuilder, ¿hay alguna buena razón para usar una consulta nativa? Del mismo modo, ¿hay algún peligro al usar una consulta nativa si puedo lograr lo mismo con JPQL o CriteriaBuilder? Y, por último, si existe el peligro de utilizar una consulta nativa en cuanto a la desincronización de la memoria caché JPA, ¿existiría el mismo peligro al ejecutar una consulta equivalente con JPQL o CriteriaBuilder?¿Cuándo debería una persona usar consultas nativas con JPA 2.0 en lugar de JPQL o CriteriaBuilder?
Mi filosofía ha sido evitar las consultas nativas, pero seguramente hay momentos en que son necesarios. Me parece que si puedo hacerlo con JPQL o CriteriaBuilder, entonces debería hacerlo.
Gracias.
Maravillosa explicación @JB Nizet como siempre. La pregunta también pregunta sobre el Generador de criterios. Tengo entendido que las consultas de Criteria son útiles para mantener la seguridad de tipo (que JPQL no proporciona como se menciona en su respuesta). Sin embargo, personalmente encuentro Criteria API muy voluminosa y difícil de leer. ¿Hay otras ventajas de Criteria API sobre JPQL? – HopeKing
También encuentro que esta API es muy engorrosa y poco intuitiva de usar, y más difícil de leer. Solo uso esta API cuando necesito redactar una consulta de forma dinámica en función de ... criterios (de ahí el nombre de la API). Por ejemplo, cuando un usuario envía un formulario de búsqueda con varios criterios opcionales (nombre, primer nombre, fecha mínima, fecha de nacimiento máxima, lo que sea), se deben agregar o no varios elementos cláusula where dependiendo de la presencia o ausencia de esos criterios. –
Al grano y muy claro. Gracias. – HopeKing