jueves, 22 de octubre de 2009

Ejemplo de Hibernate 3 y Anotaciones JPA Basico

Ejemplo de Hibernate 3 y anotaciones JPA Basico

Esta entrada muestra el uso de las anotaciones de JPA implementadas con Hibernate 3, la estructura del proyecto en eclipse es la siguiente



Al terminar se encuentra el script SQL y codigo en java.

Las librerias importadas son las siguientes

hibernate3.jar
dom4j-1.6.1.jar
log4j-1.2.15.jar
slf4j-api-1.4.2.jar
slf4j-log4j12-1.4.2.jar
commons-collections-3.1.jar
javassist-3.4.GA.jar
antlr-2.7.6.jar
jta-1.1.jar

Las siguientes tres son para el uso de las anotaciones JPA en Hibernate

hibernate-annotations.jar
hibernate-commons-annotations.jar
persistence.jar

Este jar se usa para la conexion con Derby

derbyclient.jar

Iniciamos la construccion de la clase HibernateUtil el cual nos provee un sessionFactory

public class HibernateUtil {
private static final SessionFactory sessionFactory;

static {
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
}

public static SessionFactory getSessionFactory(){
return sessionFactory;
}
}

Hay que destacar que en este ejemplo no usamos

Configuration().configure().buildSessionFactory();

Si no que usamos AnnotationConfiguration

AnnotationConfiguration().configure().buildSessionFactory();

Usamos las anotaciones JPA en nuestra clase Persona

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table (name="PERSONA")
public class Persona {
@Id
@Column(name="ID_PERSONA")
private Long idPersona;

@Column (name="NOMBRE" , nullable=false)
private String nombre;

@Column (name="APELLIDOP", nullable=false)
private String apellidoPaterno;

@Column (name="EDAD")
private Integer edad;

public Long getIdPersona() {
return idPersona;
}

public void setIdPersona(Long idPersona) {
this.idPersona = idPersona;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public String getApellidoPaterno() {
return apellidoPaterno;
}

public void setApellidoPaterno(String apellidoPaterno) {
this.apellidoPaterno = apellidoPaterno;
}

public Integer getEdad() {
return edad;
}

public void setEdad(Integer edad) {
this.edad = edad;
}
}

Usamos las anotaciones de JPA @Entity, @Table, @Id, @Column, estas son muy intuitivas y faciles de entender.

El archivo hibernate.cfg.xml es el mismo pero con una excepcion

<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">org.apache.derby.jdbc.ClientDriver</property>
<property name="connection.url">jdbc:derby://localhost:1521/dracof</property>
<property name="connection.user">dracof</property>
<property name="connection.password">dracof</property>

<property name="current_session_context_class">thread</property>
<property name="dialect">org.hibernate.dialect.DerbyDialect</property>
<property name="show_sql">true</property>

<mapping class="org.dracof.hibernate.annotations.Persona"/>
</session-factory>
</hibernate-configuration>

El mapeo ya no lo hacemos con mapping resource y no creamos el archivo Persona.hbm.xml

<mapping resource="org/dracof/hibernate/relacional/Persona.hbm.xml"/>

Si no con

<mapping class="org.dracof.hibernate.annotations.Persona"/>

Y con esto terminamos, hacemos un main con el siguiente codigo

public static void main(String[] args) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx = session.getTransaction();

tx.begin();
Persona persona = (Persona)session.load(Persona.class, new Long(1));
System.out.println("Nombre: " + persona.getNombre());
tx.commit();
}

Obteniendo como resultado

Hibernate: select persona0_.ID_PERSONA as ID1_0_0_, persona0_.APELLIDOP as APELLIDOP0_0_, persona0_.EDAD as EDAD0_0_, persona0_.NOMBRE as NOMBRE0_0_ from PERSONA persona0_ where persona0_.ID_PERSONA=?
Nombre: DRACOF

Codigo SQL

Codigo Java

Suerte.

2 comentarios: