typedquery query ejemplo java jpa jpa-2.0 jpql criteria-api

java - ejemplo - typedquery



Qué usar: JPQL o Criteria API? (3)

Mi aplicación Java usa JPA para persistencia de objetos. El dominio comercial es muy simple (solo tres clases son persistentes, con 3-5 propiedades en cada una). Las consultas son simples también. La pregunta es qué enfoque debería usar: ¿JPQL o Criteria API?


Creo que también puedes considerar algún otro nuevo marco como:

Query Dsl

Consulta de objeto

Consulta de Torpedo

esto le da un tipo de forma segura e inteligente para generar consultas, no son estándar, pero estoy bastante seguro de que el próximo estándar se basará en una de esta tecnología.

si quieres permanecer en los estándares, ignora esto.

adiós


Estoy bastante seguro de que esto ya se ha cubierto aquí en SO, pero no pude encontrar la pregunta existente. Entonces, aquí está mi punto de vista sobre la pregunta:

  • Encuentro que las consultas JPQL son más fáciles de escribir / leer.
  • Encuentro que la API de Criteria es útil para crear consultas dinámicas.

Que es básicamente lo que encontrará en Hibernate: Criteria vs. HQL .

Pero hay una gran diferencia entre la API de criterios de JPA 2.0 y la API de criterios de Hibernate que vale la pena mencionar: la API de criterios de JPA 2.0 es una API de tipo seguro y ofrece comprobaciones de tiempo de compilación, finalización de código, mejor soporte de refactorización, etc. Sin embargo, no encuentra que los beneficios superen la facilidad de uso de JPQL.

En resumen, yo preferiría JPQL, a excepción de las consultas dinámicas (por ejemplo, para las funciones de búsqueda de múltiples criterios).

Preguntas relacionadas

Más recursos


Respondí una pregunta similar anteriormente y volveré a publicar mi respuesta aquí para el beneficio de la comunidad. Voy a suponer que estás usando un Servidor de Aplicaciones en relación con mi respuesta a continuación.

La API Criteria existe para permitir la construcción de consultas SQL dinámicas de una manera segura de tipo que evita la inyección de SQL. De lo contrario, concatenar cadenas de SQL juntas, que es propenso a errores y un riesgo de seguridad: es decir, inyección de SQL. Esa sería la única vez que quisiera usar la API de Criteria.

Si la consulta sigue siendo básicamente la misma, pero solo necesita aceptar parámetros diferentes, debe usar las @NamedQueries anotadas que son más simples, precompiladas, pueden almacenarse en caché dentro de la caché secundaria y posiblemente validarse durante el inicio del servidor.

Esa es básicamente la regla general sobre Consultas de criterios frente a @NamedQueries. En mi experiencia rara vez necesita la API de Criteria, pero es bueno que exista para las raras ocasiones en que se requiere.

Espero que esto ayude.