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.




Sea el primero en comentar

Publicar un comentario

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

TOPO