Introducción
Supongamos que tenemos las siguientes tablas con sus correspondientes relaciones:
Seguir leyendo «Ejemplos de consultas usando JPA Criteria API»
http://blog.rubensa.eu.org
Supongamos que tenemos las siguientes tablas con sus correspondientes relaciones:
Seguir leyendo «Ejemplos de consultas usando JPA Criteria API»
Cuando se introdujo JPA 2 en el 2009, incluía la nueva criteria API. El propósito de este API era alejarse del uso de los strings JQL (JPA Query Language) en tu código. Aunque JQL parece una buena idea para «apalancarte» en tus conocimientos de SQL, en el mundo de la OO (Orientación a Objetos) tiene una grave desventaja: no existe la comprobación de las query strings en tiempo de compilación. La primera vez que tienes constancia de algo mal escrito o sintácticamente incorrecto en tu query string es en tiempo de ejecución. Esto puede hacer que baje mucho el rendimiento si los desarrolladores tienen que corregir, compilar y redesplegar para continuar.
Los test unitarios pueden ayudar a solucionar este problema pero un área donde no ayudan los test unitarios es en la refactorización. La mayoría de las herramientas de refactorización no se llevan bien con las cadenas de texto y acabas teniendo que ejecutar de nuevo los test y teniendo que corregir manualmente cada string en cada iteración de test hasta que todo está correcto.
Con la JPA Criteria API es posible tener consultas type safe (con comprobación de tipado) que se comprueben en tiempo de ejecución y que permitan una refactorización mucho más eficiente.
Como nuevo usuario de Hibernate, te puede sorprender agradablemente ver que soporta la ejecución de consultas SQL mediante el método createSQLQuery() del objeto Session de Hibernate.
Inicialmente parece beneficioso utilizar las viejas y sencillas sentencias SQL para generar las consultas en tus DAO’s. Después de todo, ya conoces SQL, así que porque perder el tiempo aprendiendo HQL (Hibernate Query Language) o el Hibernate Criteria API. Además, con SQL podemos probar fácilmente las consultas en herramientas de edición de base de datos como DBVisualizer y en el caso «raro» de que lo pudiera necesitar, un DBA no familiarizado con Hibernate podría mantener y mejorar mis consultas de un modo sencillo.
Parece la solución.
Maven se fundamenta en el concepto central de ciclo de vida de construcción (build lifecycle). Esto significa que el proceso de construcción y distribución de un artifact (artefacto = proyecto) concreto está definido claramente.
Para la persona que quiera construir un proyecto significa que solamente es necesario aprender un pequeño conjunto de comandos para construir cualquier proyecto Maven, y el POM se asegurará de que obtenga los resultados deseados.
Existen tres ciclos de vida en el sistema: default, clean y site. El ciclo de vida default controla el despliegue de tu proyecto, el ciclo de vida clean controla la limpieza de tu proyecto, mientras que el ciclo de vida site controla la creación del site de documentación de tu proyecto.
Para conseguir nuestro objetivo debemos seguir una serie de pasos:
Bastante sencillo, no?
Seguir leyendo «Generación de Release con versions-maven-plugin y maven-scm-plugin»
Para conseguir nuestro objetivo debemos seguir una serie de pasos:
Bastante sencillo, no?
Seguir leyendo «Generación de Release con maven-release-plugin»
Si alguna vez has trabajado con Maven sabrás que te permite definir propiedades personalizadas que se pueden utilizar como placeholders (marcadores o comodines) para reutilizar valores o con fines de configuración o incluso como un modo de configurar los recursos de tu construcción final usando filtros (filters). Esto nos viene muy bien para definir configuraciones específicas por entorno.
Estas propiedades personalizadas se pueden definir en múltiples lugares. Pero ¿qué ocurre cuando defines (o re-defines) la misma propiedad en múltiples lugares? ¿Que definición tendrá precedencia sobre las otras?
El orden de precedencia a la hora de resolver el valor de las propiedades personalizadas en Maven es el siguiente: