JPA (Java Persistence API)

JPA puede utilizarse para crear versiones orientadas a objetos de entidades de bases de datos relacionales para que los desarrolladores las utilicen en sus aplicaciones.

Puede utilizar JPA para proporcionar anotaciones y extensiones XML que puede utilizar para describir tablas en su base de datos y su contenido, incluyendo tipos de datos, claves y relaciones entre tablas. Los desarrolladores pueden utilizar la API para realizar operaciones de base de datos en lugar de utilizar SQL.

CICS® soporta jpa-2.0, jpa-2.1, jpa-2.2, y persistence-3.0. Para obtener información sobre las diferencias entre estas versiones, consulte Java Persistence API (JPA) feature overview.

  • Entity objects son simples clases Java, y pueden ser concretas o abstractas. Cada uno representa una fila en una tabla de base de datos, y las propiedades y campos se utilizan para mantener los estados. Cada campo se asigna a una columna de la tabla y se añade información clave sobre ese campo concreto; por ejemplo, puede especificar claves primarias o campos que no pueden ser nulos.
    @Entity
    @Table(name = "JPA")
    public class Employee implements Serializable
    {
        @Id
        @Column(name = "EMPNO")
        private Long EMPNO;
    
        @Column(name = "NAME", length = 8)
        private String NAME;
    
        private static final long serialVersionUID = 1L;
    
        public Employee()
        {
            super();
        }
    
        public Long getEMPNO()
        {
            return this.EMPNO;
        }
    
        public void setEMPNO(Long EMPNO)
        {
            this.EMPNO = EMPNO;
        }
    
        public String getNAME()
        {
            return this.NAME;
        }
    
        public void setNAME(String NAME)
        {
            this.NAME = NAME;
        }
    }
  • El EntityManagerFactory se utiliza para generar un EntityManager para la unidad de persistencia. EntityManager mantiene la colección activa de entity objects que utiliza una aplicación. Puede utilizar la clase EntityManager para inicializar las clases y crear una transacción para gestionar la integridad de los datos. A continuación, se interactúa con los datos mediante los métodos de la clase Entity get y set, antes de utilizar la transacción Entity para consignar los datos.

    El siguiente ejemplo contiene código de muestra para insertar un registro:

    @WebServlet("/Create")
    public class Create extends HttpServlet
    {
        private static final long serialVersionUID = 1L;
    
        @PersistenceUnit(unitName = "com.ibm.cics.test.wlp.jpa.annotation.cics.datasource")
        EntityManagerFactory emf;
    
        InitialContext ctx;
    
        /**
        * @throws NamingException
        * @see HttpServlet#HttpServlet()
        */
        public Create() throws NamingException
        {
            super();
            ctx = new InitialContext();
        }
    
        /**
        * @see HttpServlet#doGet(HttpServletRequest request,
        HttpServletResponse response)
        */
        protected void doGet(HttpServletRequest request, HttpServletResponse
            response) throws ServletException, IOException
        {
            // Get the servlet parms
            String id = request.getParameter("id");
            String name = request.getParameter("name");
    
            // Create a new employee object
            Employee newEmp = new Employee();
            newEmp.setEMPNO(Long.valueOf(id));
            newEmp.setNAME(name);
    
            // Get the entity manager factory
            EntityManager em = emf.createEntityManager();
    
            // Get a user transaction
            UserTransaction utx;
    
            try
            {
                // Start a user transaction and join the entity manager to it
                utx = (UserTransaction) ctx.lookup("java:comp/UserTransaction");
                utx.begin();
                em.joinTransaction();
    
                // Persist the new employee
                em.persist(newEmp);
    
                // End the transaction
                utx.commit();
            }
            catch(Exception e)
            {
                throw new ServletException(e);
            }
            
            response.getOutputStream().println("CREATE operation completed");
        }
    }
  • @PersistenceUnit expresa una dependencia de un EntityManagerFactory y su unidad de persistencia asociada. El nombre de la unidad de persistencia definido en el archivo persistence.xml. Para conectar las entidades y tablas a una base de datos, creamos un archivo persistence.xml en nuestro paquete. El archivo persistence.xml describe la base de datos a la que se conectan estas entidades. El archivo incluye información importante como el nombre del proveedor, las propias entidades, la URL conexión a la base de datos y los controladores.

    El siguiente ejemplo contiene una muestra persistence.xml :

    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.0"
        xmlns="http://java.sun.com/xml/ns/persistence"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
        http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    
        <persistence-unit name="com.ibm.cics.test.wlp.jpa.annotation.cics.datasource">
            <jta-data-source>jdbc/jpaDataSource</jta-data-source>
            
            <class>com.ibm.cics.test.wlp.jpa.annotation.cics.datasource.entities.Employee</class>
            
            <properties>
                <property name="openjpa.LockTimeout" value="30000" />
                <property name="openjpa.Log" value="none" />
                <property name="openjpa.jdbc.UpdateManager" value="operation-order" />
            </properties>
        </persistence-unit>
    </persistence>