Mostrando entradas con la etiqueta hibernate. Mostrar todas las entradas
Mostrando entradas con la etiqueta hibernate. Mostrar todas las entradas

jueves, 9 de julio de 2009

Archivos hbm en Hibernate



 

 

 

 

 

¿Qué son?


Los hbm son archivos de mapeo de hibernate. Son de tipo xml y representan a una clase y tabla determinada. Haremos un ejemplo para ilustrar esta explicación.


Vamos a lo práctico


Pensemos que queremos implementar una relación muchos a muchos con las siguientes tablas:
  • Autobus (id, marca, antiguedad)
  • Conductor (id, nombre, edad)
Lo primero es indicar en hibernate.cfg, donde está los archivos de mapeo:
/src/hibernate.cfg.xml

<hibernate-configuration>
<session-factory>

...

<mapping resource="es/felipe/compañia/Conductor.hbm.xml" />
<mapping resource="es/felipe/compañia/Autobus.hbm.xml" />

</session-factory>

</hibernate-configuration>

Posteriormente creamos Conductor.hbm.xml. Mirando el código nos tendremos que dar cuenta de:
  • Las Tablas: Se creará una tabla AUTOBUS_CONDUCTOR que relacionará la tabla AUTOBUS y la tabla CONDUCTOR.
  • Los Objetos: Se relacionarán así: una colección de objetos de tipo Set en la clase Conductor, contendrá objetos Autobus. (Nota: Se ha usado un Set, pero podría haber sido cualquier otra coleccion de objetos).

/src/es/felipe/compañiaAutobus/conductor.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="es.felipe.compañia">
<class name="Conductor">
<id name="id" column="CONDUCTOR_ID">
<generator class="native"></generator>
</id>
<property name="nombre" />
<property name="edad" />
<set name="autobuses" table="AUTOBUS_CONDUCTOR">
<key column="CONDUCTOR_ID" />
<many-to-many column="AUTOBUS_ID"
class="Autobus" />
</set>
</class>
</hibernate-mapping> 

Y ahora el código de autobus.hbm.xml, que representa sólo la tabla Autobus:

/src/es/felipe/compañiaAutobus/autobus.hbm.xm

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="es.felipe.compañia">
<class name="Autobus" table="AUTOBUS">
<id name="id" column="AUTOBUS_ID">
<generator class="native" />
</id>
<property name="antiguedad" />
<property name="marca" />
</class>
</hibernate-mapping> 

Luego vienen las clases respectivas. Veamos que en la clase Conductor existe la propiedad del tipo Set, que será una colección de objetos Autobus.
/src/es/felipe/compañiaAutobus/conductor.java

public class Conductor {private Long id;
private String nombre;
private int edad;
private Set autobuses = new HashSet();
public Conductor(){}
public Long getId() {}
public void setId(Long id) {}
public String getNombre() {}
public void setNombre(String nombre) {}
public int getEdad() {}
public void setEdad(int edad) {}
public Set getAutobuses() {}
public void setAutobuses(Set autobuses) {}
}
/src/es/felipe/compañiaAutobus/autobus.java

public class Autobus {
private Long id;
private int antiguedad;
private String marca;
public Autobus() {}
public Long getId() {}
private void setId(Long id) {}
public int getAntiguedad() {}
public void setAntiguedad(int antiguedad) {}
public String getMarca() {}
public void setMarca(String marca) {}
}
Espero que haya servido de ayuda y haya aclarado los conceptos, sobretodos a aquellos que empiezan con Hibernate.




jueves, 21 de mayo de 2009

Creación Automática de Tablas en Hibernate


Icono de hibernate


hbm2ddl.auto


En el archivo hibernate.cfg.xml existe la propiedad hbm2ddl.auto que resulta muy útil. Nos va a permitir crear las tablas en la BBDD a partir de los .hbm (archivos de mapeo de hibernate).


Se colocará antes de la declaración de los mapeos:





...
<property name="hbm2ddl.auto">create</property>




<mapping resource="es/felipe/compañia/Conductor.hbm.xml" />
<mapping resource="es/felipe/compañia/Autobus.hbm.xml" />
...




Los valores que puede tomar son los siguientes:



  • create - Crea las tablas.

  • update - Actualiza las tablas si ha habido modificaciones.

  • create-drop - Borra las tablas existentes y las crea de nuevo.


Si sólo vamos a añadir datos sin modificar las tablas, lo ideal es ponerla a update.


Éstas operaciones se realizarán sobre el esquema que indiquemos en la propiedad connection.url.





<hibernate-configuration>

<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/hibernate4</property>
<property name="connection.username">root</property>
<property name="connection.password">123123</property>
...




Felinfo: Java, Linux, Virtualización. Open Source.  ©Template Blogger Green by Dicas Blogger .

TOPO