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.org/dtd/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.org/dtd/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();