tel./fax: +34 91 675 33 06 [email protected] - ......Se ve que estos chicos de Hibernate piensan en...

7
Avenida de Castilla,1 - Edificio Best Point - Oficina 21B 28830 San Fernando de Henares (Madrid) tel./fax: +34 91 675 33 06 [email protected] - www.autentia.com Somos su empresa de Soporte a Desarrollo Informático. Ese apoyo que siempre quiso tener... 1. Desarrollo de componentes y proyectos a medida Tecnología Desarrollo Sistemas Gran Empresa Producción autentia Certificación o Pruebas Verificación previa RFP Concurso Consultora 1 Consultora 2 Consultora 3 Equipo propio desarrollo Piloto 3a 3b 1. Definición de frameworks corporativos. 2. Transferencia de conocimiento de nuevas arquitecturas. 3. Soporte al arranque de proyectos. 4. Auditoría preventiva periódica de calidad. 5. Revisión previa a la certificación de proyectos. 6. Extensión de capacidad de equipos de calidad. 7. Identificación de problemas en producción. 3. Arranque de proyectos basados en nuevas tecnologías ¿Qué ofrece Autentia Real Business Solutions S.L? Para más información visítenos en: www.autentia.com Compartimos nuestro conociemiento en: www.adictosaltrabajo.com Gestor portales (Liferay) Gestor de contenidos (Alfresco) Aplicaciones híbridas Tareas programadas (Quartz) Gestor documental (Alfresco) Inversión de control (Spring) BPM (jBPM o Bonita) Generación de informes (JasperReport) ESB (Open ESB) Control de autenticación y acceso (Spring Security) UDDI Web Services Rest Services Social SSO SSO (Cas) Spring MVC, JSF-PrimeFaces /RichFaces, HTML5, CSS3, JavaScript-jQuery JPA-Hibernate, MyBatis Motor de búsqueda empresarial (Solr) ETL (Talend) Dirección de Proyectos Informáticos. Metodologías ágiles Patrones de diseño TDD 2. Auditoría de código y recomendaciones de mejora 4. Cursos de formación (impartidos por desarrolladores en activo)

Transcript of tel./fax: +34 91 675 33 06 [email protected] - ......Se ve que estos chicos de Hibernate piensan en...

Page 1: tel./fax: +34 91 675 33 06 info@autentia.com - ......Se ve que estos chicos de Hibernate piensan en todo y saben hacer las cosas bien. Gracias a esto Gracias a esto podremos usar nuestros

Avenida de Castilla,1 - Edificio Best Point - Oficina 21B28830 San Fernando de Henares (Madrid)

tel./fax: +34 91 675 33 [email protected] - www.autentia.com

Somos su empresa de Soporte a Desarrollo Informático.Ese apoyo que siempre quiso tener...

1. Desarrollo de componentes y proyectos a medida

TecnologíaDesarrolloSistemas

Gran Empresa

Producción

autentia

Certificacióno Pruebas

Verificación previa

RFP Concurso

Consultora 1

Consultora 2

Consultora 3

Equipo propio desarrolloPiloto

3a

3b

1. Definición de frameworks corporativos.2. Transferencia de conocimiento de nuevas arquitecturas.3. Soporte al arranque de proyectos.4. Auditoría preventiva periódica de calidad.5. Revisión previa a la certificación de proyectos.6. Extensión de capacidad de equipos de calidad.7. Identificación de problemas en producción.

3. Arranque de proyectos basados en nuevas tecnologías

¿Qué ofrece Autentia Real Business Solutions S.L?

Para más información visítenos en: www.autentia.com

Compartimos nuestro conociemiento en: www.adictosaltrabajo.com

Gestor portales (Liferay)Gestor de contenidos (Alfresco)Aplicaciones híbridas

Tareas programadas (Quartz)Gestor documental (Alfresco)Inversión de control (Spring)

BPM (jBPM o Bonita)Generación de informes (JasperReport)ESB (Open ESB)

Control de autenticación y acceso (Spring Security)UDDIWeb ServicesRest ServicesSocial SSOSSO (Cas)

Spring MVC, JSF-PrimeFaces /RichFaces, HTML5, CSS3, JavaScript-jQuery

JPA-Hibernate, MyBatisMotor de búsqueda empresarial (Solr)ETL (Talend)

Dirección de Proyectos Informáticos.Metodologías ágilesPatrones de diseñoTDD

2. Auditoría de código y recomendaciones de mejora

4. Cursos de formación (impartidos por desarrolladores en activo)

Page 2: tel./fax: +34 91 675 33 06 info@autentia.com - ......Se ve que estos chicos de Hibernate piensan en todo y saben hacer las cosas bien. Gracias a esto Gracias a esto podremos usar nuestros

Home | Quienes Somos | Empleo | Tutoriales | Contacte

Fecha de creación del tutorial: 2007-06-25

Hibernate y las anotaciones de EJB 3.0 Creación: 14-06-2007

Índice de contenidos

� 1. Introducción � 2. Entorno � 3. Instalación � 4. El fichero hibernate.xml.cfg � 5. Las clases anotadas

� 5.1. Campaign (generado por las Hibernate Tools) � 5.2. Campaign (dejando sólo las anotaciones imprescindibles)

� 6. Conclusiones � 7. Sobre el autor

1. Introducción

Hibernate (http://www.hibernate.org/) es una potente herramienta de persistencia que nos permite mapear clases en una base de datos relacional.

Desde la versión 3 Hibernate soporta usar anotaciones de Java 5 para especificar la relación entre las clases y las tablas de la base de datos.

Gracias a las anotaciones conseguiremos librarnos de los ficheros de xml de configuración de los mapeos (los famosos .hbm.xml). De esta manera tendremos que mantener menos ficheros ya que sólo es necesario el .java. Además escribiremos menos, ya que la mayoría de las opciones tienen valores por defecto de forma que en la mayoría de los casos podremos ahorrarnos las anotaciones (bastaría con

Lanzado TNTConcept versión 0.4.1 ( 04/06/2007) Desde Autentia ponemos a vuestra disposición el software que hemos construido (100% gratuito y sin restricciones funcionales) para nuestra gestión interna, llamado TNTConcept (auTeNTia).

Construida con las últimas tecnologías de desarrollo Java/J2EE (Spring, JSF, Acegi, Hibernate, Maven, Subversion, etc.) y disponible en licencia GPL, seguro que a muchos profesionales independientes y PYMES os ayudará a organizar mejor vuestra operativa.

Las cosas grandes empiezan siendo algo pequeño ..... Saber más en: http://tntconcept.sourceforge.net/

Tutorial desarrollado por: Alejandro Perez García 2003-2007

Alejandro es Socio fundador de Autentia y nuestro experto en J2EE, Linux y optimización de aplicaciones empresariales.

Si te gusta lo que ves, puedes contratarle para impartir cursos presenciales

en tu empresa o para ayudarte en proyectos (Madrid).

Contacta: [email protected].

www.adictosaltrabajo.com es el Web de difusión de conocimiento de

www.autentia.com

Catálogo de cursos

NUEVO CATÁLOGO DE SERVICIOS DE AUTENTIA

(PDF 6,2MB)

Descargar este documento en formato PDF hibernateAnnotations.pdf

Firma en nuestro libro de Visitas <-----> Asociarme al grupo AdictosAlTrabajo en eConozco

Master Experto Java100% alumnos se colocan. Incluye Struts, Hibernate, Ajax www.grupoatrium.com

Java PDF LibrariesCreate, View, Modify, Print, Secure PDF documents - Server & GUI APIs www.qoppa.com

Cursos de JavaFormación a medida para empresas Planes adaptados a sus necesidades. www.knowfactory.com

Página 1 de 6Tutoriales en AdictosAlTrabajo: Java, J2EE, Visual C++, Linux, UML, OOP y mucho más

25/06/2007http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=hibernateAnnotations

Page 3: tel./fax: +34 91 675 33 06 info@autentia.com - ......Se ve que estos chicos de Hibernate piensan en todo y saben hacer las cosas bien. Gracias a esto Gracias a esto podremos usar nuestros

especificar que la clase es una entidad, cual es el campo identificador y poco más).

Esta forma de trabajar usando los valores por defecto es altamente recomendable, ya que nos ahorramos gran parte de la configuración. Este concepto de "Convención frente a Configuración" seguramente lo hemos odio mucho cuando se trata de Ruby on Rails; y creo que tienen toda la razón. Debemos intentar trabajar siempre de una misma manera, basándonos en convenciones, esto no sólo nos ahorra tediosos ficheros de configuración, sino que cuando vemos cualquier aplicación ya sabemos que esperara.

Está bien que esté esa configuración para hacer el sistema más flexible y que nos podamos "saltar" esas convenciones cuando realmente sea necesario, porque nos aporta una ventaja real.

"Las normas están para saltárselas" es una frase que me gusta mucho y que suelo usar en mis cursos. Es una frase que tiene más implicaciones de las que pudiera parecer en un principio. No se trata ni mucho menos de un manifiesto anarquista, todo lo contrario, el desarrollo de software debería ser un proceso reglado y disciplinado, con un un conjunto de normas que debemos conocer y respetar. Lo que quiero decir con esta frase es que debemos conocer esas normas, y que si decidimos saltarnos alguna sea porque realmente obtenemos una ventaja de peso, en estos casos esa parte del sistema deberá estar especialmente bien documentada para facilitar el mantenimiento (para que cuando otros vean que nos hemos saltado la norma sepan por qué). Es decir, debemos ser muy conscientes de porque nos saltamos la norma y que implicaciones tiene; lo que no vale, bajo ningún concepto, es hacer las cosas porque sí. Recordar que "el desconocimiento de la ley no exime de su cumplimiento" ;)

(je, je, después de esta pequeña pausa para la evangelización seguimos con las anotaciones de Hibernate ;)

Otra de las principales ventajas de las anotaciones de Hibernate es que son compatibles con las anotaciones de JPA (Java Persistente API, la capa de persistencia de EJB 3.0). Se ve que estos chicos de Hibernate piensan en todo y saben hacer las cosas bien. Gracias a esto podremos usar nuestros POJOs tanto en Hibernate como en EJB3 como en cualquier otro sistema que implemente JPA (por ejemplo en el recién estrenado proyecto de Apache OpenJPA http://openjpa.apache.org/).

Por todo esto no podemos hacer otra cosa que recomendar el uso de las anotaciones. Además la generación de las anotaciones también está soportada por las Hibernate Tools que ya vimos en http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=hibernateTools

2. Entorno

El tutorial está escrito usando el siguiente entorno:

� Hardware: Portátil Asus G1 (Core 2 Duo a 2.1 GHz, 2048 MB RAM, 120 GB HD).

� Sistema Operativo: GNU / Linux, Debian (unstable), Kernel 2.6.21, KDE 3.5

� Máquina Virtual Java: JDK 1.6.0-b105 de Sun Microsystems

� Eclipse 3.2.2

� Hibernate 3.2.2.ga

� Hibernate Tools 3.2.0 Beta9

� MySql 5.0.41-2

3. Instalación

Para poder usar las anotaciones de Hibernate, además de los jar de Hibernate, tenemos que dar de alta los jar de Hibernate Annotations en nuesto proyecto.

Si usamos Maven, basta con añadir en nuestro pom.xml

<!-- Para usar Hibernate -->

<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate</artifactId>

<version>3.2.4.sp1</version>

</dependency>

<!-- Para usar las anotaciones de Hibernate -->

<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-annotations</artifactId>

<version>3.3.0.ga</version>

</dependency>

<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-commons-annotations</artifactId>

<version>3.3.0.ga</version>

</dependency>

Si no usamos Maven, podemos ir a www.hibernate.org y en la zona de "Download" descargarnos los jar correspondientes.

4. El fichero hibernate.xml.cfg

El fichero de configuración de Hibernate (normalmente hibernate.cfg.xml) cambia poco, aquí vemos un ejemplo:

Página 2 de 6Tutoriales en AdictosAlTrabajo: Java, J2EE, Visual C++, Linux, UML, OOP y mucho más

25/06/2007http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=hibernateAnnotations

Page 4: tel./fax: +34 91 675 33 06 info@autentia.com - ......Se ve que estos chicos de Hibernate piensan en todo y saben hacer las cosas bien. Gracias a esto Gracias a esto podremos usar nuestros

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>

<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/curso</property>

<property name="hibernate.connection.username">autentia</property>

<property name="hibernate.connection.password">autentia</property>

<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>

<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>

<property name="hibernate.current_session_context_class"> org.hibernate.context.ManagedSessionContext

</property>

<property name="show_sql">true</property>

<mapping class="com.autentia.app.persist.hibernate.Campaign" />

<mapping class="com.autentia.app.persist.hibernate.Subcampaign" />

<mapping class="com.autentia.app.persist.hibernate.Budget" />

</session-factory>

</hibernate-configuration>

Antes era típico especificar los "mapping" con el atributo "resource" indicando el fichero xml, ahora usamos el atributo "class" indicando la clase.

El resto del fichero, como veis se mantiene igual.

5. Las clases anotadas

Ahora empieza lo bueno !!!. Tenemos tres clases Campaign, Subcampaign y Budget, donde una campaña puede tener muchas subcampañas, y una subcampaña puede tener muchos presupuestos.

Esto correspondería con el siguiente diagrama UML:

5.1. Campaign (generado por las Hibernate Tools)

package com.autentia.app.persist.hibernate;

// Generated Jun 21, 2007 7:52:14 PM by Hibernate Tools 3.2.0.b9

import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column;

import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table;

/**

* Campaign generated by hbm2java

*/

@Entity

@Table(name = "Campaign", catalog = "curso")

public class Campaign implements java.io.Serializable { private Long id; private String name;

private Set<Subcampaign> subcampaigns = new HashSet<Subcampaign>(0);

public Campaign() { }

public Campaign(String name) {

this.name = name; }

public Campaign(String name, Set<Subcampaign> subcampaigns) {

this.name = name;

this.subcampaigns = subcampaigns; }

Página 3 de 6Tutoriales en AdictosAlTrabajo: Java, J2EE, Visual C++, Linux, UML, OOP y mucho más

25/06/2007http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=hibernateAnnotations

Page 5: tel./fax: +34 91 675 33 06 info@autentia.com - ......Se ve que estos chicos de Hibernate piensan en todo y saben hacer las cosas bien. Gracias a esto Gracias a esto podremos usar nuestros

@Id

@GeneratedValue

@Column(name = "id", unique = true, nullable = false) public Long getId() { return this.id; }

public void setId(Long id) { this.id = id; }

@Column(name = "name", nullable = false, length = 50) public String getName() {

return this.name; }

public void setName(String name) {

this.name = name; }

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "campaign")

public Set<Subcampaign> getSubcampaigns() {

return this.subcampaigns; }

public void setSubcampaigns(Set<Subcampaign> subcampaigns) {

this.subcampaigns = subcampaigns; }

}

Podemos ver como a nivel de clase indicamos que se trata de una entidad, y la tabla correspondiente.

A nivel de cada "getter" le indicamos con que campo de la tabla corresponde. En este caso especial mención a las anotaciones @Id y @GeneratedValue, que indican cual es el campo clave (la PK), y que sus valores serán generados por la base de datos.

5.2. Campaign (dejando sólo las anotaciones imprescindibles)

package com.autentia.app.persist.hibernate;

// Generated Jun 21, 2007 7:52:14 PM by Hibernate Tools 3.2.0.b9

import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column;

import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table;

/**

* Campaign generated by hbm2java

*/

@Entity

public class Campaign implements java.io.Serializable { private Long id; private String name;

private Set<Subcampaign> subcampaigns = new HashSet<Subcampaign>(0);

public Campaign() { }

public Campaign(String name) {

this.name = name; }

public Campaign(String name, Set<Subcampaign> subcampaigns) {

this.name = name;

this.subcampaigns = subcampaigns; }

@Id

@GeneratedValue

public Long getId() { return this.id; }

public void setId(Long id) { this.id = id; }

public String getName() {

return this.name; }

public void setName(String name) {

this.name = name; }

Página 4 de 6Tutoriales en AdictosAlTrabajo: Java, J2EE, Visual C++, Linux, UML, OOP y mucho más

25/06/2007http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=hibernateAnnotations

Page 6: tel./fax: +34 91 675 33 06 info@autentia.com - ......Se ve que estos chicos de Hibernate piensan en todo y saben hacer las cosas bien. Gracias a esto Gracias a esto podremos usar nuestros

@OneToMany(mappedBy = "campaign")

public Set<Subcampaign> getSubcampaigns() {

return this.subcampaigns; }

public void setSubcampaigns(Set<Subcampaign> subcampaigns) {

this.subcampaigns = subcampaigns; }

}

Podemos ver que a nivel de clase ya sólo se está indicando que se trata de una entidad, no hace falta indicar la tabla porque coincide con el nombre de la clase.

A nivel de cada "getter" pasa lo mismo, como el nombre del atributo coincide con el del campo de la tabla, no hace falta poner la anotación. Los atributos como "unique" o "nullable", no son realmente necesarios, estos atributos nos sirven sobre todo si queremos generar el script de creación de la base de datos a partir de las clases anotadas.

Lo que si que tenemos que indicar obligatoriamente es el atributo que hace de PK y la relaciones.

6. Conclusiones

Con Hibernate, las anotaciones y la convención en lugar de la configuración (tomando los valores por defecto), podemos implementar toda la capa de persistencia de nuestras aplicaciones en cuestión de horas. Y si nos apoyamos en Herramientas como las Hibernate Tools, esas horas se pueden convertir en minutos.

Ya sabéis que desde Autentia (www.autentia.com) siempre os aconsejamos desarrollos rápidos y mantenibles. Hibernate se puede convertir en un potente aliado para conseguir estos objetivos.

7. Sobre el autor

Alejandro Pérez García, Ingeniero en Informática (especialidad de Ingeniería del Software)

Socio fundador de Autentia (Formación, Consultoría, Desarrollo de sistemas transaccionales)

mailto:[email protected]

Autentia Real Business Solutions S.L. - 'Soporte a Desarrollo'

http://www.autentia.com

This work is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 2.5 License. Puedes opinar sobre este tutorial aquí

Recuerda que el personal de Autentia te regala la mayoría del conocimiento aquí compartido (Ver todos los tutoriales)

¿Nos vas a tener en cuenta cuando necesites consultoría o formación en tu empresa?

¿Vas a ser tan generoso con nosotros como lo tratamos de ser con vosotros?

[email protected]

Somos pocos, somos buenos, estamos motivados y nos gusta lo que hacemos ...... Autentia = Soporte a Desarrollo & Formación

Autentia S.L. Somos expertos en: J2EE, Struts, JSF, C++, OOP, UML, UP, Patrones de diseño ..

y muchas otras cosas

Página 5 de 6Tutoriales en AdictosAlTrabajo: Java, J2EE, Visual C++, Linux, UML, OOP y mucho más

25/06/2007http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=hibernateAnnotations

Page 7: tel./fax: +34 91 675 33 06 info@autentia.com - ......Se ve que estos chicos de Hibernate piensan en todo y saben hacer las cosas bien. Gracias a esto Gracias a esto podremos usar nuestros

Patrocinados por enredados.com .... Hosting en Castellano con soporte Java/J2EE

Otros Tutoriales Recomendados (También ver todos)

Nuevo servicio de notificaciones Si deseas que te enviemos un correo electrónico cuando introduzcamos nuevos tutoriales, inserta tu dirección de correo en el siguiente formulario.

Subscribirse a Novedades

e-mail

Nombre Corto Descripción

Interceptando un EJB en JBoss En este tutorial os vamos a enseñar la arquitectura de EJBs en JBoss y a como modificarla, insertando un interceptor propio dentro de la cadena de interceptores del Proxy Cliente.

Persistencia Básica en Java Este tutorial trata de explicar como funcione y que es la persistencia en Java mediante sencillos ejemplos prácticos de JDBC para insertar un elemento y realizar una búsqueda simple y el uso de DAO y Hibernate como mejoras

Despliegue gráfico de EJBs Os mostramos como crear y desplegar de un modo gráfico un EJB de sesión el el servidor de aplicaciones de referencia de Sun

Hibernate 3 y los tipos de datos para cadenas largas

En este tutorial se contará la experiencia que hemos tenido a la hora de manejar los diferentes tipos de datos existentes para grandes cadenas de texto, tales como el tipo Clob de Oracle, o los tipos TEXT de MySQL y SQLServer, utilizando la última versión

Hibernate Tools y la generación de código

En este tutorial vamos a ver como usar estas herramientas para hacer el esqueleto de una pequeña aplicación, de manera muy sencilla, generando código a partir de las tablas creadas en la base de datos.

Anotaciones en EJB 3.0 Este tuotiral nos va a enseñar algunas características del API de EJB 3.0 y las mejoras introducidas en la nueva version 3.0

Manejar dos bases de datos distintas con Hibernate

Alejandro Pérez nos enseña como manejar dos bases de datos distintas con Hibernate

EJB´s y Orion Recreación de la guía paso a paso de como crear una aplicación Web con EJB´s y Servlets y su despliegue con ANT sobre Orion

Creación automática de recursos Hibernate con Middlegen

En este tutorial aprendereis como utilizar la herramienta middlegen para generar distintas capas de persistencia (CMP 2.0, JDO, Hibernate, Torque), a partir de un modelo físico de datos, de un modo automático, mediante el uso de la herramienta middlegen

Introducción a Hibernate Cesar Crespo nos enseña como utilizar unos de los sistemas más extendidos de mapeo de objetos a estructuras relacionales (tablas de base de datos)

Nota: Los tutoriales mostrados en este Web tienen como objetivo la difusión del conocimiento. Los contenidos y comentarios de los tutoriales son responsabilidad de sus respectivos autores. En algún caso se puede hacer referencia a marcas o nombres cuya propiedad y derechos es de sus respectivos dueños. Si algún afectado desea que incorporemos alguna reseña específica, no tiene más que solicitarlo. Si alguien encuentra algún problema con la información publicada en este Web, rogamos que informe al administrador [email protected] para su resolución.

www.AdictosAlTrabajo.com Opimizado 800X600

Página 6 de 6Tutoriales en AdictosAlTrabajo: Java, J2EE, Visual C++, Linux, UML, OOP y mucho más

25/06/2007http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=hibernateAnnotations