Hibernate nos permite definir las relaciones de nuestros objetos con las tablas de la base de datos por medio de un archivo xml y por medio de anotaciones en la clase.
Veamos con mayor detalle las partes de este mapeo.
Primero se define la clase y la tabla:
< class name="event" table="events">
...
Cuando usamos anotaciones llamamos a @Entity que indica que la clase es una entidad manejada por hibernate y se va a persistir. Además con @Table indicamos el nombre de la tabla.
Luego se puede definir el id, de la siguiente forma:
node="element-name|@attribute-name|element/@attribute|."
Donde:
- name: Indica el nombre de la propiedad.
type: indica el tipo.
- column: la columna en la base de datos.
- unsaved-value: Valor que toma cuando el objeto no esta guardado.
- access: como va aceder hibernate a esta propiedad.
Esto es similar a utilizar la anotación @Id en Jpa.
El generator es el motor que indica como hibernate se va a manegar para obtener los números de las claves nuevas.
Hibernate ofrece varias estrategias:
- IDENTITY: soporta id autoincrementales en DB2, MySQL, MS SQL Server, Sybase and
HypersonicSQL .
- SEQUENCE : Usa secuencias de la base.
- TABLE: Toma el nombre de la tabla y la columna como fuente y genera una un identificador a partir de estas.
- AUTO: Toma el más conveniente según el motor de base de datos.
Cuando son claves compuestas las cuales se encuentran en una clase embebida se puede definir de la siguiente manera:
......
Cuando tenemos claves compuestas que no se encuentren en una clase envevida podremos definirla de la siguiente manera:
Version
Cuando queremos que hibernate detecte los conflictos podemos agregar un campo versión, que indica la versión del registro. De esta forma hibernate incrementara este registro cada vez que guarde.
También se puede utilizar un timestamp para mantener la versión de los registros.
Con anotaciones podemos usar el @Version.
Property
Con Property declaramos una propiedad de nuestro objeto:
Componentes o objetos embebidos
Se pueden definir estructuras de objetos contenidos en el archivo contenedor, de esta forma nos ahorramos hacer un archivo de mapeo. Cuando la clase contenida es utilizada en 2 o más clases no es conveniente utilizar componentes.
........