JPA Consultas con Nombre vs Criterios de la API?

Hay una heurística/mejor práctica/conjunto de reglas de decisión entre el Criterios API y NamedQuery?

Mis pensamientos hasta el momento :

Nombre de las consultas son por lo general más legible. Los criterios de las consultas son más flexibles.

Ambos están precompilados. Tiendo a confiar en el uso de consultas con nombre tan largo como sea posible, a continuación, cambiar a los criterios.

Pero tal vez
la necesidad de «flexify» la consulta mediante el uso de la API de criterios es una sugerencia para subóptima de diseño (por ejemplo, la separación de preocupaciones)?

Gracias

InformationsquelleAutor kostja | 2011-09-07

5 Kommentare

  1. 34

    Consultas con nombre son más óptima (que se analiza o se prepara una vez). Los criterios de las consultas son dinámicos, (no son precompilado, aunque algunos JPA proveedores, tales como EclipseLink mantener un criterio de preparar caché).

    Me gustaría utilizar criterios sólo para consultas dinámicas.

    • Estoy de acuerdo. Buena respuesta!
    • Me gusta solo el uso de los Criterios. Combinar los Criterios de la API con un metamodelo de la entidad y abandonar el uso de la Cuerda y producen fuertes escrito código para Java geek que es realmente divertido! Sin embargo, me encontré con este prueba de que en realidad muestran que los Criterios de realizar incluso peor que JPQL!
    • Técnicamente que el rendimiento de la prueba de no utilizar el generado Metamodelo que la mejor parte acerca de JPA Criterios de la API. Yo tenía gran dificultad en el principio de conmutación de Hibernación Criterios para JPA, pero ahora yo realmente prefiero los JPA uno.
    • Llego tarde a la parte, pero cuando dices JPA Criterios API ¿a qué te refieres? No es la especificación JPA e hibernate uno de la aplicación/proveedor? Que proveedor en particular estaría hablando cuando dicen que prefieren JPA Criterios para Hibernar?
    • Esta es una muy pasado de rosca 🙂 pero el hilo no fue la comparación de «Hibernación» a «JPA». Fue comparar el uso de la Hibernación Criterios API vs Hibernate Consultas con Nombre. En general los Criterios de las consultas son muy buenos cuando se desea crear una consulta dinámica. Consultas con nombre son mejores para una consulta en la que sólo había parámetros que cambian pero no la estructura que se analiza una vez y no tiene que ser reconstruida cada vez que la utilice. El uso de la JPA criterios metamodelo es probablemente la mejor manera de todos, pero que requiere el código generado.
  2. 10

    Criterios de las consultas son una buena elección cuando una consulta debe ser generado de forma dinámica, en función de la variable y varios criterios de búsqueda, por ejemplo.

    Para la estática de consultas JPQL es mucho más legible, y yo prefiero con ellos que los criterios de las consultas. Usted podría perder algo de seguridad, pero la unidad de pruebas debe hacerlo más seguro.

  3. 4

    Otro punto de vista es que, aunque los criterios de la consulta no es tan legible, es typesafe, por lo tanto, proporciona comprobación de tipos en tiempo de compilación. Si cambia la base de datos en los proyectos donde hay muchas entidades y muchas consultas, que es muy útil para ver en tiempo de compilación, lo que las consultas salió mal porque del cambio.

    Por otro lado, no estoy seguro de que es más beneficioso que la sencillez de JPQL

  4. 2

    De hecho, me fui a través de la Hibernación (4.3.0-SNAPSHOT) de origen y la EclipseLink (2.5.0-SNAPSHOT) de origen y miró a través de la implementación de JPA en cada uno.

    EclipseLink está claro que no es seguro para subprocesos de la manera que usted describe. Concretamente se trata de calcular une repetidamente.

    De hibernación de la aplicación se ve hilo fuerte para mí. Yo no estoy 100% seguro, pero parece ser. Yo diría que esto no está garantizado para ser verdad en el futuro, ya que no está especificado.

    Sin embargo, te advierto, no creo que vas a ganar mucho. De lo que estoy mirando, gran parte de la compilación de la consulta es en realidad hizo durante el «createQuery» fase para no ganar mucho almacenamiento en caché de los resultados.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein