JPA - Componentes ORM

La mayoría de las aplicaciones contemporáneas utilizan bases de datos relacionales para almacenar datos. Recientemente, muchos proveedores cambiaron a la base de datos de objetos para reducir su carga de mantenimiento de datos. Significa que la base de datos de objetos o las tecnologías relacionales de objetos se encargan del almacenamiento, la recuperación, la actualización y el mantenimiento. La parte central de las tecnologías relacionales de este objeto son el mapeo del archivo orm.xml. Como xml no requiere compilación, podemos realizar cambios fácilmente en múltiples fuentes de datos con menos administración.

Mapeo relacional de objetos

El mapeo relacional de objetos (ORM) le informa brevemente sobre qué es ORM y cómo funciona. ORM es una capacidad de programación para convertir datos del tipo de objeto al tipo relacional y viceversa.

La característica principal de ORM es mapear o vincular un objeto a sus datos en la base de datos. Al mapear tenemos que considerar los datos, el tipo de datos y sus relaciones con su propia entidad o entidad en cualquier otra tabla.

Características avanzadas

  • Idiomatic persistence : Le permite escribir las clases de persistencia utilizando clases orientadas a objetos.

  • High Performance : Tiene muchas técnicas de búsqueda y técnicas de bloqueo esperanzadoras.

  • Reliable: Es muy estable y eminente. Utilizado por muchos programadores industriales.

Arquitectura ORM

Aquí sigue la arquitectura ORM.

La arquitectura anterior explica cómo se almacenan los datos del objeto en una base de datos relacional en tres fases.

Fase 1

La primera fase, denominada como Object dataLa fase contiene clases POJO, interfaces de servicio y clases. Es la capa principal del componente empresarial, que tiene operaciones y atributos de lógica empresarial.

Por ejemplo, tomemos una base de datos de empleados como esquema.

  • La clase POJO de empleado contiene atributos como ID, nombre, salario y designación. Y métodos como los métodos setter y getter de esos atributos.

  • Las clases de servicio / DAO de empleado contienen métodos de servicio como crear empleado, encontrar empleado y eliminar empleado.

Fase 2

La segunda fase nombrada como mapping o persistence fase que contiene el proveedor JPA, el archivo de mapeo (ORM.xml), el cargador JPA y la cuadrícula de objetos.

  • JPA Provider: El producto del proveedor que contiene el sabor JPA (javax.persistence). Por ejemplo, Eclipselink, Toplink, Hibernate, etc.

  • Mapping file : El archivo de mapeo (ORM.xml) contiene la configuración de mapeo entre los datos en una clase POJO y los datos en una base de datos relacional.

  • JPA Loader: El cargador JPA funciona como una memoria caché, que puede cargar los datos de la cuadrícula relacional. Funciona como una copia de la base de datos para interactuar con las clases de servicio para los datos POJO (Atributos de la clase POJO).

  • Object Grid: La cuadrícula de objetos es una ubicación temporal que puede almacenar la copia de datos relacionales, es decir, como una memoria caché. Todas las consultas a la base de datos se efectúan primero en los datos de la cuadrícula de objetos. Solo después de que se confirma, afecta la base de datos principal.

Fase 3

La tercera fase es la fase de datos relacionales. Contiene los datos relacionales que están conectados lógicamente al componente empresarial. Como se mencionó anteriormente, solo cuando el componente empresarial confirma los datos, se almacenan físicamente en la base de datos. Hasta entonces, los datos modificados se almacenan en una memoria caché en formato de cuadrícula. Igual es el proceso de obtención de datos.

El mecanismo de la interacción programática de las tres fases anteriores se denomina mapeo relacional de objetos.

Mapping.xml

El archivo mapping.xml es para instruir al proveedor de JPA para mapear las clases de Entidad con las tablas de la base de datos.

Tomemos un ejemplo de entidad Empleado que contiene cuatro atributos. La clase POJO de entidad de empleado denominadaEmployee.java es como sigue:

public class Employee {

   private int eid;
   private String ename;
   private double salary;
   private String deg;

   public Employee(int eid, String ename, double salary, String deg) {
      super( );
      this.eid = eid;
      this.ename = ename;
      this.salary = salary;
      this.deg = deg;
   }

   public Employee( ) {
      super();
   }

   public int getEid( ) {
      return eid;
   }
   
   public void setEid(int eid) {
      this.eid = eid;
   }
   
   public String getEname( ) {
      return ename;
   }
   
   public void setEname(String ename) {
      this.ename = ename;
   }

   public double getSalary( ) {
      return salary;
   }
   
   public void setSalary(double salary) {
      this.salary = salary;
   }

   public String getDeg( ) {
      return deg;
   }
   
   public void setDeg(String deg) {
      this.deg = deg;
   }
}

El código anterior es la clase POJO de entidad de empleado. Contiene cuatro atributos eid, esmalte, salario y deg. Considere que estos atributos son los campos de la tabla en la base de datos y eid es la clave principal de esta tabla. Ahora tenemos que diseñar un archivo de mapeo de hibernación para él. El archivo de mapeo llamadomapping.xml es como sigue:

<? xml version="1.0" encoding="UTF-8" ?>

<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm    
   http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
   version="1.0">
      
   <description> XML Mapping file</description>
      
   <entity class="Employee">        
      <table name="EMPLOYEETABLE"/>
      <attributes>
      
         <id name="eid">
            <generated-value strategy="TABLE"/>
         </id>

         <basic name="ename">
            <column name="EMP_NAME" length="100"/>
         </basic>
         
         <basic name="salary">
         </basic>
         
         <basic name="deg">
         </basic>
         
      </attributes>
   </entity>
   
</entity-mappings>

El script anterior para mapear la clase de entidad con la tabla de la base de datos. En este archivo

  • <entity-mappings> : etiqueta define la definición de esquema para permitir etiquetas de entidad en un archivo xml.

  • <description> : etiqueta define la descripción sobre la aplicación.

  • <entity>: tag define la clase de entidad que desea convertir en tabla en una base de datos. La clase de atributo define el nombre de la clase de entidad POJO.

  • <table>: etiqueta define el nombre de la tabla. Si desea mantener el nombre de la clase como nombre de la tabla, esta etiqueta no es necesaria.

  • <attributes> : etiqueta define los atributos (campos en una tabla).

  • <id>: etiqueta define la clave principal de la tabla. los<generated-value> La etiqueta define cómo asignar el valor de la clave principal, como Automático, Manual o tomado de Secuencia.

  • <basic> : la etiqueta se utiliza para definir los atributos restantes de la tabla.

  • <column-name> : la etiqueta se utiliza para definir el nombre del campo de la tabla definido por el usuario.

Anotaciones

Generalmente, los archivos Xml se utilizan para configurar un componente específico o mapear dos especificaciones diferentes de componentes. En nuestro caso, tenemos que mantener xml por separado en un marco. Eso significa que mientras escribimos un archivo xml de mapeo, necesitamos comparar los atributos de la clase POJO con las etiquetas de entidad en el archivo mapping.xml.

Aquí está la solución: En la definición de la clase, podemos escribir la parte de configuración usando anotaciones. Las anotaciones se utilizan para clases, propiedades y métodos. Las anotaciones comienzan con el símbolo '@'. Las anotaciones se declaran antes de que se declare la clase, propiedad o método. Todas las anotaciones de JPA se definen en el paquete javax.persistence.

A continuación, se muestra la lista de anotaciones utilizadas en nuestros ejemplos.

Anotación Descripción
@Entidad Esta anotación especifica declarar la clase como entidad o tabla.
@Mesa Esta anotación especifica que se declare el nombre de la tabla.
@Básico Esta anotación especifica campos sin restricción explícitamente.
@Incrustado Esta anotación especifica las propiedades de la clase o una entidad cuyo valor es la instancia de una clase incrustable.
@Carné de identidad Esta anotación especifica la propiedad, uso para la identidad (clave principal de una tabla) de la clase.
@GeneratedValue Esta anotación especifica cómo se puede inicializar el atributo de identidad, como automático, manual o valor tomado de la tabla de secuencia.
@Transitorio Esta anotación especifica la propiedad que no es persistente, es decir, el valor nunca se almacena en la base de datos.
@Columna Esta anotación se utiliza para especificar una columna o atributo para la propiedad de persistencia.
@SequenceGenerator Esta anotación se utiliza para definir el valor de la propiedad que se especifica en la anotación @GeneratedValue. Crea una secuencia.
@TableGenerator Esta anotación se utiliza para especificar el generador de valor para la propiedad especificada en la anotación @GeneratedValue. Crea una tabla para la generación de valor.
@Tipo de acceso Este tipo de anotación se utiliza para establecer el tipo de acceso. Si establece @AccessType (FIELD), se producirá un acceso inteligente a los campos. Si establece @AccessType (PROPERTY), se producirá una evaluación inteligente de la propiedad.
@UnirseColumna Esta anotación se utiliza para especificar una asociación de entidades o una colección de entidades. Esto se utiliza en asociaciones de varios a uno y de uno a varios.
@UniqueConstraint Esta anotación se utiliza para especificar el campo, restricción única para la tabla primaria o secundaria.
@ColumnResult Esta anotación hace referencia al nombre de una columna en la consulta SQL mediante la cláusula select.
@Muchos a muchos Esta anotación se utiliza para definir una relación de varios a varios entre las tablas de unión.
@ManyToOne Esta anotación se utiliza para definir una relación de varios a uno entre las tablas de unión.
@Uno a muchos Esta anotación se utiliza para definir una relación de uno a varios entre las tablas de unión.
@Doce y cincuenta y nueve de la noche Esta anotación se utiliza para definir una relación uno a uno entre las tablas de unión.
@NamedQueries Esta anotación se utiliza para especificar la lista de consultas con nombre.
@NamedQuery Esta anotación se utiliza para especificar una consulta con un nombre estático.

Estándar de Java Bean

Clase Java, encapsula los valores y comportamientos de la instancia en un objeto llamado de unidad única. Java Bean es un componente o un objeto de almacenamiento temporal y reutilizable. Es una clase serializable que tiene un constructor predeterminado y métodos getter & setter para inicializar los atributos de la instancia individualmente.

Convenciones de frijoles

  • Bean contiene el constructor predeterminado o un archivo que contiene una instancia serializada. Por lo tanto, un bean puede instanciar el bean.

  • Las propiedades de un frijol se pueden segregar en propiedades booleanas y propiedades no booleanas.

  • La propiedad no booleana contiene getter y setter métodos.

  • La propiedad booleana contiene setter y is método.

  • GetterEl método de cualquier propiedad debe comenzar con una letra pequeña 'get' (convención del método Java) y continuar con un nombre de campo que comience con una letra mayúscula. Por ejemplo, el nombre del campo es 'salario', por lo que el método de obtención de este campo es 'getSalary ()'.

  • SetterEl método de cualquier propiedad debe comenzar con una letra pequeña 'set' (convención del método Java), continuar con un nombre de campo que comience con una letra mayúscula y el valor del argumento para establecerlo en field. Por ejemplo, el nombre del campo es 'salario', por lo que el método de establecimiento de este campo es 'setSalary (doble sal)'.

  • Para la propiedad booleana, es un método para verificar si es verdadero o falso. Por ejemplo, la propiedad booleana 'vacía', el método is de este campo es 'isEmpty ()'.