Hibernate [Parte 2]: Configuración y uso

Septiembre 2017


Para ver la primera parte de este tutorial haz clic Aquí



Configuración de Hibernate en una aplicación JAVA

  • Instalar JDK 1.4 o JDK 1.5
  • Descargar la versión 3 desde https://www.hibernate.org/
  • Referenciar los jars Hibernate en el classpath
    • Definir el fichero de configuración hibernate hibernate.cfg.xml:


Se recomienda colocar este fichero en la carpeta que contiene el código fuente (fuente JAVA) de la aplicación JAVA.

A continuación un ejemplo de fichero hibernate.cfg.xml con los comentarios necesarios:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration
    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
    "[http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

  <session-factory>
	
    	 
				
		<property name="hibernate.connection.url">jdbc:oracle:thin:@dbServer:1521:db</property> 
		<property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>
        	<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
		<property name="hibernate.connection.username">dbusername</property>
		<property name="hibernate.connection.password">dbpassword</property>
		
 			
		<!-- Configuration hibernate -->
       		 <property name="show_sql">true</property>
		<property name="format_sql">true</property>  
       		 <property name="hibernate.use_outer_join">true</property>
		<property name="hibernate.query.substitutions">1</property>
		<property name="hibernate.connection.autocommit">false</property>
		<property name="hibernate.jdbc.batch_size">50</property>
		<property name="hibernate.jdbc.use_get_generated_keys">true</property>

		
		<!-- Pool de connexion : ici C3P0 qui est déclaré -->
		<property name="hibernate.connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider</property>
		<property name="hibernate.c3p0.acquire_increment">3</property> 
		<property name="hibernate.c3p0.idle_test_period">180</property> 
		<property name="hibernate.c3p0.max_size">100</property> 
		<property name="hibernate.c3p0.min_size">10</property> 
		<property name="hibernate.c3p0.timeout">1000</property>
		
		 <!—desactivar la cache  segundo nivel-->
		<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

				
		
		
		<!—Lista de los ficheros de mapeo hbm -->
		<mapping resource="com/org/client/mapping/Client.hbm.xml"/>
		
		
	</session-factory>
  </hibernate-configuration>
  • Definir los ficheros de mapeo hbm:


Es un conjunto de ficheros que hace el mapeo entre la entidad de la base de datos y el objeto JAVA de persistencia asociado.
Las rutas completa de todos los ficheros de mapeo hbm son descritos en el fichero de configuración hibernate.cfg.xml. (ver ejemplo del fichero de configuración)

Uso de Hibernate en una aplicación JAVA


Para el ejemplo del uso de Hibernate vamos a utilizar el ejemplo del fichero de configuración de Hibernate visto anteriormente.
  • Declaración de la tabla (Oracle):


CREATE TABLA CLIENTE
(
	  ID_Cliente NUMBER(10) NOT NULL,
	  TRATAMIENTO VARCHAR2(10),
	  NOMBRE VARCHAR2(30),	  
	  DEVOLUCION NUMBER(19,5),
	  CA NUMBER(19,5),
	  CONSTRAINT PK_CLIENTE PRIMARY KEY (CLIENTE_ID)
);
  • Declaración de las clases JAVA de persistencia:

/** constructor predeterminado */

public Cliente() {
}

/** Constructor completo **/
public Cliente(Long clienteId, String tratamiento, String nombre, BigDecimal devolucion, BigDecimal ca)
{
this.idCliente = idCliente;
this.tratamiento = tratamiento;
this.name = name;
this.devolucion = devolucion;
this.ca = ca;
}

/** Los getters y setters**/
public Long getIdCliente()
{
return this.clienteId;
}
public void setIdCliente (Long clienteId) {
this.clienteId = clienteId;
}
public String getTratamiento() {
return this.tratamiento;
}
public void setTratamiento(String tratamiento) {
this.tratamiento = tratamiento;
}
public String getNombre() {
return this.nombre;
}
public void setNom(String nombre) {
this.nombre = nombre;
}
public BigDecimal getDevolucion() {
return this.devolucion;
}
public void setRemise(BigDecimal devolucion) {
this.devolucion = devolucion;
}
public BigDecimal getCa() {
return this.ca;
}
public void setCa(BigDecimal ca) {
this.ca = ca;
}
}
  • Fichero de Mapeo Cliente.hbm.xml :


<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
    
<hibernate-mapping>
<class 
    name="[Nom_Package].Cliente" 
    tabla="CLIENTE"
         entity-name="Cliente"
>	
    <meta attribute="class-description" inherit="false">
       @hibernate.class
        tabla="CLIENTE"
    </meta>

    <id
        name="idCliente"
        type="java.lang.Long"
        column="ID_CLIENTE"
    >
		    <meta attribute="field-description" inherit="false">
		       Id del cliente
		    </meta>
    
        <meta attribute="field-description">
           @hibernate.id
            generator-class="assigned"
            type="java.lang.Long"
            column="CLIENTE_ID"

        </meta>
        <generator class="increment" />
    </id>

    <property
        name="tratamiento"
        type="java.lang.String"
        column="TRATAMIENTO"
        length="10"
    >
		    <meta attribute="field-description" inherit="false">
		       Tratamiento del cliente
		    </meta>
        <meta attribute="field-description">
           @hibernate.property
            column="TRATAMIENTO"
            length="10"
        </meta>    
    </property>
    <property
        name="name"
        type="java.lang.String"
        column="NAME"
        length="30"
    >
		    <meta attribute="field-description" inherit="false">
		       Nombre del cliente
		    </meta>
        <meta attribute="field-description">
           @hibernate.property
            column="NAME"
            length="30"
        </meta>    
    </property>

    <property
        name="devolucion"
        type="java.math.BigDecimal"
        column="DEVOLUCION"
        length="19"
    >
		    <meta attribute="field-description" inherit="false">
		       Devolucion del cliente
		    </meta>
        <meta attribute="field-description">
           @hibernate.property
            column="DEVOLUCION"
            length="19"
        </meta>    
    </property>
    <property
        name="ca"
        type="java.math.BigDecimal"
        column="CA"
        length="19"
    >
		    <meta attribute="field-description" inherit="false">
		       Volumen de Negocios
		    </meta>


</class>
</hibernate-mapping>

La clave primaria es definida en la etiqueta <id>: en el ejemplo, esta basada en una secuencia. Es posible definir una clave compuesta utilizando la etiqueta <composite-id> :
	<composite-id>
      	<key-property name="attribut1"/>
     	 	<key-property name="attribut2"/>
	</composite-id>
  • Guardar un nuevo objeto en la base de datos:


El siguiente ejemplo utiliza el método saveOrUpdate() de la sesión hibernate.
org.hibernate.Session sess = sessFact.openSession();
Cliente c = new Cliente();
c.setName("John");
p.setTratamiento("Sr");
Transaction tx = sess.beginTransaction();
sess.saveOrUpdate(p);
tx.commit();
sess.close();

Consulta también

Artículo original escrito por deri58. Traducido por Carlos-vialfa. Última actualización: 12 de noviembre de 2009 a las 18:12 por Carlos-vialfa.
El documento «Hibernate [Parte 2]: Configuración y uso» se encuentra disponible bajo una licencia Creative Commons. Puedes copiarlo o modificarlo libremente. No olvides citar a CCM (es.ccm.net) como tu fuente de información.