Java Persistence API
In this tutorial, we are going to discuss Java Persistence API. The Java Persistence API provides Java developers with an object/relational mapping facility for managing relational data in Java applications.
- JPA is an API, and it can be used to perform database operations in enterprise applications with ORM implementation tools.
- J2EE provided JPA along with the EJB3.0 version as a persistence mechanism.
- JPA is a specification provided by SUN Microsystems, and it is implemented by some third-party vendors like JBOSS, Eclipse Foundations, Apache, etc.
- JPA follows ORM rules regulations to achieve data persistency in enterprise applications, and the following tools implement it.
Hibernate -------> JBOSS
EclipseLink -------> Eclipse Foundation
Open JPA -------> Apache Software Foundations
Note
- If we want to use JPA in enterprise applications, we must use either of the JPA implementations.
- If we want to prepare JPA applications with a “Hibernate” JPA provider, we must use the following steps.
- Create Java project in Eclipse with JPA library which includes all Hibernate JARs.
- Create Entity class under src folder.
- Create mapping File or Use JPA annotations in POJO class.
- Create JPA configuration File[persistence.xml]
- Create Test Application.
To prepare Test application in JPA we have to use the following steps.
- Create EntityManagerFactory Object.
- Create EntityManager Object.
- Create EntityTransaction Object as per the requirement
- Perform Persistence operation
- Perform Commit or rollback operations if we use EntityTransaction.
1. Create EntityManagerFactory Object
javax.persistence.EntityManagerFactory is a Factory class. It can manage the number of EntityManager object. To get the EntitymanagerFactory class object, we have to use the following method from javax.persistence.Persistence class.
public static EntityManagerFactory createEntityManagerFactory(String persistence_Unit_Name);
E.g.
EntityManagerFactory factory = Persistence.createEntitymanagerFactory("std");
2. Create EntityManager Object
javax.persistence.EntityManager is an interface, it able to provide predefined Library to perform persistence operations. To get EntityManager object we have to use the following method from EntiotyManagerFactory.
public EntityManager createEntityManager()
E.g
EntityManager entManager = factory.createEntitymanager();
3. Create EntityTransaction Object as per the requirement
javax.persistence.EntityTransaction is a class, it able to provide Transaction support in JPA applications inorder to perform persistence operations. To get EntityTramsaction object we have to use the following method from EntityManager.
public EntityTransaction getTransaction()
E.g
EntityTransaction entTransaction = entManager.getTransaction();
Note
EntityTransaction contains the following methods in order to complete Transaction.
public void commit() public void rollback()
Note
EntityTranmsaction is required for only non-select operations only, not for select operations.
4. Perform Persistence operation
To perform Persistence operations, we have to use the following methods from EntityManager object.
- public Object find (Class entity_Class, Serializable pk_Value)
- public void persist (Object obj)
- public void remove (Object obj)
Note
To perform Updations, first we have to get Entity object from Database table by using find() method then we have to use set New data to Entity Object then perform commit operation.
package com.ashok.spring.jpa.beans; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; /** * * @author ashok.mariyala * */ @Entity @Table(name = "employee") public class Employee { @Column(name = "emp_name") private String empName; @Id @Column(name = "emp_id") private String empId; @Column(name = "emp_address") private String empAddress; public String getEmpName() { return empName; } public void setEmpName(String empName) { this.empName = empName; } public String getEmpId() { return empId; } public void setEmpId(String empId) { this.empId = empId; } public String getEmpAddress() { return empAddress; } public void setEmpAddress(String empAddress) { this.empAddress = empAddress; } @Override public String toString() { return "Employee [empName=" + empName + ", empId=" + empId + ", empAddress=" + empAddress + ", salary=" + "]"; } }
<?xml version="1.0" encoding="UTF-8"?> <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" version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"> <persistence-unit name="employee"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <mapping-file>com.ashok.spring.jpa.beans.Employee</mapping-file> <properties> <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver" /> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/employee" /> <property name="javax.persistence.jdbc.user" value="root" /> <property name="javax.persistence.jdbc.password" value="ashok" /> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> </properties> </persistence-unit> </persistence>
package com.ashok.spring.jpa.test; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; import com.ashok.spring.jpa.beans.Employee; /** * * @author ashok.mariyala * */ public class TestJpaApplication { public static void main(String[] args) { EntityManagerFactory factory = Persistence.createEntityManagerFactory("employee"); EntityManager entManager = factory.createEntityManager(); Employee emp = new Employee(); emp.setEmpId("0087"); emp.setEmpName("Ashok Kumar"); emp.setEmpAddress("Bhimavaram"); EntityTransaction tx = entManager.getTransaction(); tx.begin(); entManager.persist(emp); tx.commit(); System.out.println("Employee Inserted Succssfully"); } }