jpa Getting started with jpa Hello World


Let's see all the basic component for create a simple Hallo World.

  1. Define which implementation of JPA 2.1 we will use
  2. Build the connection to database creating the persistence-unit
  3. Implements the entities
  4. Implements DAO (Data access object) for manipulate the entities
  5. Test the application


Using maven, we need this dependancies:


    <!-- JPA is a spec, I'll use the implementation with HIBERNATE -->

    <!-- JDBC Driver, use in memory DB -->


Persistence Unit

In the resources folder we need to create a file called persistence.xml. The easiest way for define it is like this:

<persistence-unit name="hello-jpa-pu" transaction-type="RESOURCE_LOCAL">

        <!-- ~ = relative to current user home directory -->
        <property name="javax.persistence.jdbc.url" value="jdbc:h2:./test.db"/>
        <property name="javax.persistence.jdbc.user" value=""/>
        <property name="javax.persistence.jdbc.password" value=""/>
        <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
        <property name="hibernate.show_sql" value="true"/>

        <!-- This create automatically the DDL of the database's table -->
        <property name="" value="create-drop"/>


Implement an Entity

I create a class Biker:

package it.hello.jpa.entities;

import javax.persistence.*;
import java.util.Date;
import java.util.List;

@Table(name = "BIKER")
public class Biker implements Serializable {

    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name = "bikerName")
    private String name;

    @Column(unique = true, updatable = false)
    private String battleName;

    private Boolean beard;

    private Date birthday;

    private Date registrationDate;

    @Transient // --> this annotiation make the field transient only for JPA
    private String criminalRecord; 

    public Long getId() {

    public void setId(Long id) { = id;

    public String getName() {

    public void setName(String name) { = name;

    public String getBattleName() {
        return battleName;

    public void setBattleName(String battleName) {
        this.battleName = battleName;

    public Boolean getBeard() {
        return this.beard;

    public void setBeard(Boolean beard) {
        this.beard = beard;

    public Date getBirthday() {
        return birthday;

    public void setBirthday(Date birthday) {
        this.birthday = birthday;

    public Date getRegistrationDate() {
        return registrationDate;

    public void setRegistrationDate(Date registrationDate) {
        this.registrationDate = registrationDate;

    public String getCriminalRecord() {
        return criminalRecord;

    public void setCriminalRecord(String criminalRecord) {
        this.criminalRecord = criminalRecord;

Implement a DAO


import it.hello.jpa.entities.Biker;

import javax.persistence.EntityManager;
import java.util.List;

public class MotorcycleRally {

    public Biker saveBiker(Biker biker) {
        EntityManager em = EntityManagerUtil.getEntityManager();
        return biker;


EntityManagerUtil is a singleton:

package it.hello.jpa.utils;

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

public class EntityManagerUtil {

    // USE THE SAME NAME IN persistence.xml!
    public static final String PERSISTENCE_UNIT_NAME = "hello-jpa-pu";

    private static EntityManager entityManager;

    private EntityManagerUtil() {

    public static EntityManager getEntityManager() {
        if (entityManager == null) {
            // the same in persistence.xml
            EntityManagerFactory emFactory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);

            return emFactory.createEntityManager();
        return entityManager;

Test the application

package it.hello.jpa.test;

public class TestJpa {

public void insertBiker() {
    MotorcycleRally crud = new MotorcycleRally();

    Biker biker = new Biker();

    biker = crud.saveBiker(biker);

    Assert.assertEquals(biker.getId(), Long.valueOf(1L));


The output will be:

Running it.hello.jpa.test.TestJpa Hibernate: drop table BIKER if exists Hibernate: drop sequence if exists hibernate_sequence Hibernate: create sequence hibernate_sequence start with 1 increment by 1 Hibernate: create table BIKER (id bigint not null, battleName varchar(255), beard boolean, birthday date, bikerName varchar(255), registrationDate time, primary key (id)) Hibernate: alter table BIKER add constraint UK_a64ce28nywyk8wqrvfkkuapli unique (battleName) Hibernate: insert into BIKER (battleName, beard, birthday, bikerName, registrationDate, id) values (?, ?, ?, ?, ?, ?) mar 01, 2017 11:00:02 PM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation INFO: HHH000204: Processing PersistenceUnitInfo [ name: hello-jpa-pu ...] Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0