Como ya se ha comentado antes, con Hibernate o JPA se permite almacenar objetos directamente en la base de datos. Para que esto sea posible, es necesario definir lo que se denomina un modelo de datos.
Un modelo de datos, como ocurre en el modelo Entidad-Relación o en el modelo relacional, consiste en una definición previa del esquema de la información a almacenar. Por ejemplo, al crear las tablas en una base de datos SQL. Cuando creamos las tablas en SQL estamos definiendo el modelo de datos.
Aquí, con ORM, el modelo de datos se define a través de objetos Java, lo que se denomina POJO (Plain Old Java Objects), también llamados como objetos ligeros. Eso es una gran ventaja, dado que para definir cómo serán los datos a almacenar en la base de datos, se usan simplemente clases Java que ya conocemos.
Y como puedes observar en el ejemplo de los empleados y departamentos, con el que estamos trabajando en la unidad, si observas el proyecto, verás que se nos ha creado la estructura necesaria en la base de datos de forma automática, y así han aparecido ya generadas las clases de empleado y departamento en los ficheros Emp.java y Dept.java
Las clases que conforman el modelo de datos en JPA se llaman entidades. Si conoces el modelo Entidad-Relación, verás que hay cierta similitud entre dicho modelo y el modelo de datos en JPA. Una entidad JPA es conceptualmente similar a una entidad en el modelo entidad-relación. Una entidad es, en definitiva, un concepto real o abstracto que necesito en mi programa: cuenta bancaria, persona, documento, producto, etc.
Otro ejemplo donde podríamos ver estos conceptos, serían las entidades del software de un punto de venta:
También, igual que ocurre en el modelo entidad-relación, las entidades JPA tienen atributos. Un atributo de una entidad JPA será simplemente un atributo en una clase. Si añadimos atributos a nuestro modelo, quedaría algo así:
Y por último, JPA también permite indicar que relaciones hay entre las entidades. ¿Te suena? Si conoces el modelo entidad-relación seguramente sí. Las relaciones indican cómo las entidades están vinculadas entre sí. Veamos qué relaciones habría en el modelo de datos que tenemos entre manos.
En JPA podemos tener relaciones de uno a muchos, de uno a uno, de muchos a muchos, de herencia, etc. La pregunta ahora es, ¿cómo pasamos este modelo de datos a un modelo JPA? Para definir el modelo de datos en JPA escribiremos clases con anotaciones.
Una anotación es una forma de agregar información extra a diferentes elementos del lenguaje Java, tales como clases, métodos o atributos.
Dos ejemplos de anotaciones muy usadas en Java son @Override y @Deprecated:
@Override
public String toString()
{
return a;
}
@Deprecated
public String convertirACadena()
{
return a;
}
En el código anterior, las anotaciones indican información adicional sobre los métodos subsiguientes. La anotación @Override indicará que el método toString está sobrescribiendo la versión heredada de la clase padre, y @Deprecated está indicando que el método convertirACadena está desfasado y no debería usarse. En JPA veremos anotaciones asociadas a atributos, métodos y clases que permitirán detallar cómo será nuestro modelo de datos.