Autoescaneo de entidades de Hibernate con Spring
Índice de contenidos.
1. Introducción
En este breve tutorial vamos a ver una utilidad de Spring que nos servirá para autoescanear las entidades de Hibernate (@Entity) de manera que no tengamos que añadirlas al fichero hibernate.cfg.xml lo que nos ayudará a escribir menos código de configuración.
Para hacer las pruebas me basaré en el código fuente del siguiente tutorial.
El código fuente del ejemplo lo puedes descargar de aquí.
2. Entorno
- MacBook Pro 15′ (2.4 GHz Intel Core i5, 4GB DDR3 SDRAM).
- Sistema Operativo: Mac OS X Snow Leopard 10.6.4
- JDK 1.6.0_20
- Spring 3.0.4
- Hibernate Core 3.3.2.GA
3. Configuración
Lo primero, y único, que hay que hacer es configurar el bean AnnotationSessionFactoryBean como sessionFactory en nuestro fichero de configuración de Spring, el applicationContext.xml. Este bean es una subclase de LocalSessionFactoryBean y se encarga de escanear los paquetes en busca de las entidades que tengamos.
classpath:${hibernate.cfg.file} ${hibernate.dialect} com.autentia.tutoriales.entity
A través de la propiedad packagesToScan indicamos el paquete a partir del cual se encuentran nuestras entidades del modelo de datos anotadas con @Entity.
Otra posibilidad es indicarle a Spring directamente nuestras entidades a través de la propiedad annotatedClasses aunque esta opción no nos aporta tanto como la anterior ya que nos obliga a meter una a una todas las entidades que tengamos en el proyecto, lo mismo que teníamos que hacer anteriormente en el fichero hibernate.cfg.xml.
classpath:${hibernate.cfg.file} ${hibernate.dialect} com.autentia.tutoriales.entity.Footballer
4. Conclusiones
Una vez más comprobamos los beneficios que nos aporta el Framework Spring, para nosotros fundamental en nuestros desarrollos. De manera sencilla mediante la configuración de uno de sus beans podemos escanear el classpath en busca de las entidades para facilitarnos en gran medida la configuración.
Espero que te haya servido de ayuda.
Un saludo. Juan.
Antes de ejecutar cualquier acción sobre una tabla , se podria saber cuales de sus campos pueden adminitir valores nulos u otros detalles sin usar annotations en los beans.
Lo que busco es validar antes de insertar que alguna columna(en la tabla) no admita valores nulos y cancelar asi la inserción.
Gracias de antemano.
Hola Juan,
Muchas gracias por el tutorial!!!.
Solo un apunte, en el valor de la colección de packagesToScan, por defecto el escaneo no es recursivo. Si quieres que sea recursivo para que, por ejemplo, te escanee todas las entidades del paquete com.autentia.wuija y de todos los paquetes que cuelgan de él, tienes que usar la siguiente sintaxis: com.autentia.wuija.**.*.
Un saludo.
Jose.
Muchas gracias por la aportación Jose.
Muy interesante y directo al grano!