Los criterios tienen algunas ventajas sobre el uso de JPQL o SQL sin formato, como se describe en this answer: tipo de seguridad; refactorizar la amabilidad; menos dependencia de las cadenas (pero aún hay algunas). Y una gran desventaja: son menos legibles y simplemente feos. ¿Existe una API de Java (no JPA) para acceder a las bases de datos relacionales que es a la vez segura y legible?Alternativa más utilizable a Criteria API
Respuesta
Timo Westkämper ha hecho un buen trabajo con QueryDSL. Esta biblioteca proporciona una DSL para consultar diferentes proveedores de persistencia (JPA, MongoDB, Lucene ...).
Pero a menudo he utilizado soluciones hechas a mano que simplifican las consultas más comunes (enumere una entidad que restringe algunos de sus campos), impidiéndome escribir siempre las mismas líneas. Para las consultas más complejas cambié a la API de criterios ilegible y detallada.
MyBatis es un primer marco para la persistencia clase con soporte para SQL encargo, procedimientos almacenados y proyecciones avanzadas. MyBatis elimina casi todo el código JDBC y la configuración manual de parámetros y la recuperación de resultados. MyBatis puede usar XML simple o anotaciones para primitivas de configuración y mapa, interfaces de mapas y POJOs de Java (objetos antiguos de Java simple) a los registros de la base de datos.
O, como nobeh suggested: jOOQ.
En este sentido, es posible que desee echar un vistazo a [jOOQ] (http://www.jooq.org/) o [JDBI] (http://www.jdbi.org/), también. – nobeh
jOOQ, sí; JDBI, no - JDBI tiene la misma dependencia de cadenas opacas que JPQL. –
he encontrado "el último" solución a una búsqueda más fácil APP en la cara de la siguiente clase de utilidad: DynamicQueryBuilder
Da meta modelo, por lo que no se necesita para describir las relaciones usando une .
¡Busca por plantilla pojo !!! ¡Simplemente ponga los valores en una instancia de entidad y se usarán como criterios!
¡Utiliza un patrón de generador por lo que es MUY legible!
Bank bank = new Bank(); bank.setId (12L); bank.setAchCode ("1213"); bank.setCbeCode ("1234"); bank.setStatus (nuevas búsquedas (1L)); bank.setAchShortName ("121");
Lista ids = new ArrayList(); ids.add (1); ids.add (2); ids.add (3); ids.add (4); ids.add (5);
Lista cbeCodes = new ArrayList(); cbeCodes.add ("1111"); cbeCodes.add ("2222");
DynamicQueryBuilder queryDyncBuilder1 = nuevo DynamicQueryBuilder.Builder (nulo) .select (banco) .withOperType (Operator.OperType.AND). withAdvancedParam ("cbeCode", como, PERCENT_AROUND) .withAdvancedParam ("id", IN, ids) .withAdvancedParam ("achCode", ENTRE, cbeCodes) .withAdvancedParam ("achShortName", GT) .orderBy ("id") .orderBy ("cbeCode", true) .orderBy ("status.code", true) .build();
System.out.println (queryDyncBuilder1.getQueryString());
Si ejecuta la llamada por encima del componente construirá el siguiente resultado JPQL consulta:
SELECT b
FROM Bank b
WHERE b.status = :status
AND b.cbeCode LIKE :cbeCode
AND b.achShortName > :achShortName
AND b.id IN :id
AND (b.achCode BETWEEN :achCodeFrom AND :achCodeTo)
ORDER BY b.status.code DESC, b.id ASC, b.cbeCode DESC
"Utiliza un patrón de compilador por lo que es MUY legible" Me gusta QueryDSL bastante más a este respecto. –
- 1. Hibernate criteria api 'Seleccionar'
- 2. Alternativa más rápida a ColorConvertOp
- 3. alternativa más rápida a memcpy?
- 4. alternativa más rápida a file_get_contents()
- 5. Implementación SVM más rápida utilizable en Python
- 6. Alternativa TrueCrypt con API
- 7. ¿Una alternativa más rápida a MD5?
- 8. ¿Una alternativa más rápida a DecimalFormat.format()?
- 9. ¿Una alternativa más rápida a eval?
- 10. ¿Cómo especificar el bloqueo pesimista con la API de Criteria?
- 11. ¿Hay algo así como Restrictions.eq (verdadero, falso) en Criteria API?
- 12. Seleccionar columnas específicas en jpa 2 Criteria API?
- 13. Escribir la cláusula HQL utilizando Hibernate Criteria API
- 14. Creación de consultas utilizando Criteria API (JPA 2.0)
- 15. Consulta dinámica de JPA 2.0 con la API de Criteria
- 16. NHibernate Criteria Collection Contiene
- 17. Hibernate Query vs Criteria Performance
- 18. Hibernate Criteria vs HQL: ¿qué es más rápido?
- 19. Parent(), una alternativa más rápida?
- 20. API alternativa para google blog API de búsqueda
- 21. Alternativa a virsh (libvirt)
- 22. Más rápido App Engine Development Datastore Alternativa
- 23. Alternativa a la API de geolocalización de Google Maps
- 24. Convirtiendo phpdoc a docset utilizable por Dash
- 25. Cassandra Client API ¿Más similar a App Engine Datastore API?
- 26. NHibernate: la forma más fácil de hacer una búsqueda LIKE en una columna entera con Criteria API?
- 27. API de Geolocalización de Firefox Alternativa
- 28. ¿Cómo reutilizar un objeto Criteria con hibernación?
- 29. ¿Existe una alternativa más rápida a GDI GetPixel()?
- 30. ¿Existe una alternativa más ordenada a `except: pass`?
[Otro sugirió lecturas] (http://stackoverflow.com/q/825141/248082) – nobeh