Download JPA EntityManager Demo

EntityManager is an interface, which is used to perform CRUD (Create, Retrieve, Update and Delete) operation on an object. It is exist in javax.persistence package
Ex: EntityManager em = emf.createEntityManager();

1. void persist(Object entity)
   It is used to save object into database.
2. T find(Class<T> classObj, Object searchId)
   It is used search an object with the help of Primary Key from database.
3. void remove(Object paramObject)
   It is used to remove object from database.
4. javax.persistence.Query createNamedQuery(String name)
   It is used to create Query object for executing named query.
5. javax.persistence.Query createNativeQuery(String sql)
   It is used to create Query object for executing SQL query.
6. javax.persistence.Query createQuery(String qlString)
   It is used to create Query object for executing a Java Persistence query language statement (Ex: HQL).
7. javax.persistence.EntityTransaction getTransaction()
   It is used to create the object of EnityTransaction for performing a transaction on entity.
9. T merge(T entity)
   It is used to merge the entity with current transaction.
10. boolean isOpen()
   It is used to check whether EntityManagerFactory is open or not.
11. void clear()
   It is used to detached entities.
12. void close()
   It is used to close EntityManager.
13. boolean contains(Object obj)
   It is used to check entity instance belonging in current persistence context.
14. void detach(java.lang.Object entity)
   It is used to detached an entity.


Run this program, then JPA will create a table with name emp and two columns with name id and name. It will also create a sequence with name emp_seq.
Insert one row into table emp with id 1 and name Ravindra.
package com.groupofknowledge;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class Main {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("demo");
        EntityManager em = emf.createEntityManager();
        Emp e = new Emp();


Description:- persistence.xml file contains information of database. The specification of each tag is explained below...
<persistence-unit name="demo"></persistence-unit> tag has name="demo", which should match with javax.persistence.Persistence.createEntityManagerFactory("demo") in Main.java file.
<class>com.groupofknowledge.Emp</class> tag represents entity class.
In <property name="hibernate.show_sql" value="true"/> tag has a hibernate.show_sql property key, which contains boolean value. If value="true", it means query will be visible in console otherwise it will not be visible in console.
In <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> tag has a javax.persistence.jdbc.driver property key which indicates database driver details.
Example: The drivers are given as below for different database.
  • com.mysql.jdbc.Driver (MySql)
  • org.postgresql.Driver (PostgreSql)
  • oracle.jdbc.driver.OracleDriver (Oracle)
  • com.microsoft.sqlserver.jdbc.SQLServerDriver (SQL Server)
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/test"/> has a javax.persistence.jdbc.url property key which indicates information of database connection.
The description of jdbc:mysql://localhost:3306/test is given as below...
  • localhost for local database, give IP address for remote database
  • 3306 database port
  • test database schema
Example: The different connection url's are given as below for different database.
  • jdbc:mysql://localhost:3306/test (MySql)
  • jdbc:postgresql://localhost:5432/test (PostgreSql)
  • jdbc:oracle:thin:@localhost:1521:xe (Oracle)
  • jdbc:sqlserver://MYPC\\SQLEXPRESS;databaseName=test (SQL Server)
In <property name="javax.persistence.jdbc.user" value="root"/> tag indicates the database user name.
In <property name="javax.persistence.jdbc.password" value="root" /> tag indicates the database password.
In <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> tag has a hibernate.dialect property used to generate query according to database
Example: The different dialect are given as below for different database.
  • org.hibernate.dialect.MySQLDialec (MySql)
  • org.hibernate.dialect.PostgreSQLDialect (PostgreSql)
  • org.hibernate.dialect.Oracle10gDialect (Oracle)
  • org.hibernate.dialect.SQLServerDialect (SQL Server)
In <property name="hibernate.hbm2ddl.auto" value="update"/> tag has a hibernate.hbm2ddl.auto property can contains any one value among create/update/validate/create-drop.
  • create It drops all tables and create new tables when EntityManagerFactory is initialized.
  • update It does not drop any table, it only updates the table schema.
  • validate It validates that the schema matches, make no changes to the schema of the database.
  • create-drop It drops all tables and create new tables when EntityManagerFactory is initialized. As well as it drops all tables when EntityManagerFactory is closed.
<?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="demo">
            <property name="hibernate.show_sql" value="true"/>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/test"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="root" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>


Emp is an entity class, which have two properties id and name.
@Entity: This annotation is used on class level. This class is treated as entity class. If it is not declared then throws java.lang.IllegalArgumentException: Unknown entity. It contains one parameter.
Ex: @Entity(name="test"), if @Table is not defined, then it creates a table with name in @Entity(name="emp1") otherwise creates a table name of class as emp. The name of entity is by default class name. This name can be use in HQL queries like table name in normal SQL queries.
@Table This annotation is used on class level. It is used to create table with given name.
Ex: @Table(name = "emp"), It will create a table with name emp. @Id This property is treated as primary key. It is used only on property level.
@SequenceGenerator is used to create sequence in database. It is used only on property level.
@GeneratedValue It is used only on property level. It is used to hold the reference of sequence.
Ex:- @SequenceGenerator(name = "emp_gen", ...) --> @GeneratedValue(generator = "emp_gen")
@Column(name="something") This annotation used on property level. If we don't declare column annotation, then jpa is treated by default column name as property name.
package com.groupofknowledge;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Table(name = "emp")
public class Emp {
    @SequenceGenerator(name = "emp_gen", sequenceName = "emp_seq",
        allocationSize = 1, initialValue = 1, schema = "gok")
    @GeneratedValue(generator = "emp_gen")
    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    public void setId(Integer id) {
        this.id = id;
    public String getName() {
        return name;
    public void setName(String name) {
        this.name = name;


emp (Table)
id name
1 Ravindra

Download JPA EntityManager Demo