JPA First Program


  • Jdk 1.7
  • IDE (I am using Eclipse Kepler IDE)
  • Database (I am using mysql)

Lets start with, first program:

Suppose emp is a table with two columns: id and name, where id is integer type primary key and name is varchar type.


You can download demo project from given link below. It is a complete demo project included jars. Download and import in Eclipse as a general project. For running this project create a database name as test. User name as root and password as root. If you want to change user name, password and database, then you need to change in persistence.xml file. After these changes, right click on Main class file, Run as Java Application. This demo is for insertion of data into database. After running check data in emp table.

Download JPA Hibernate Hello World Demo

Step-1:- File > New > JPA Project

Description:- For creating new JPA project, Open Eclipse, goto File menu then click on New, after that click on JPA Project.


Step-2:- Put Project Name > Click on Finish

Description:- Give the name of project after that click on Finish button


After clicking on Finish button, you will get structure as below...


persistence.xml contains...

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="" xmlns:xsi="" xsi:schemaLocation="">
    <persistence-unit name="hibernate-jpa">


Step-3:- persistence.xml

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 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)
  • (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="" value="update"/> tag has a 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="" xmlns:xsi="" xsi:schemaLocation="">
    <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="" 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) { = id;
    public String getName() {
        return name;
    public void setName(String name) { = name;


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();


id name
1 Ravindra

Download JPA Hibernate Hello World Demo