Home Hibernate Retrieving or finding an Entity using JPA

Retrieving or finding an Entity using JPA

Retrieving or Finding an Entity

  • Once an entity in the database, Student student = entintyManager.find(Student.class, 1L); this line will retrieve student entity where identifier value is 1. This is equal to query SELECT * FROM STUDENT WHERE ID=1;
  • what happens if the object has been removed or we supplied wrong id by accident? then the results will be simply null.
  • It’s just one line, but what we need to understand really is, Persistence transition  or State of Student entity.

Note:
To understand JPA entity life cycle completely read JPA Entity lifecycle

Persistence transition or state change when EntityManager’s find() called

  • On successful call entintyManager.find(Student.class, 1L); student entity state become persistent in the persistence context.
  • Persistent state instances are always associated with persistence-context and transnational.
  • In this state if you change any value of student object using student reference, it will be reflected in persistence context.
find-entity-lifecycle

Technologies Used in example :

  • JPA 2.1
  • Hibernate 5.2.6
  • MySql 8.0
  • Maven 3
  • Spring Tool Suite (STS) 3.9.8
  • Java 1.8

Mapping Studen.java class

@Entity(name="STUDENT")
public class Student {
	
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO, generator="native")
	@GenericGenerator(name = "native", strategy = "native")
	@Column(name = "ID")
	private Long studentId;
	
	@Column(name = "FNAME")
	private String firstName;
	
	@Column(name = "LNAME")
	private String lastName;
	
	@Column(name = "CONTACT_NO")
	private String contactNo;

       // setters and getters

Finding an Entity Code Example 1 :

public static void main( String[] args )
    {
        EntityManagerFactory emf = null;
        EntityManager entityManager = null;
        EntityTransaction transaction = null;
        
        try{
            emf = Persistence.createEntityManagerFactory("jbd-pu");
            entityManager = emf.createEntityManager();
            transaction = entityManager.getTransaction();
            transaction.begin();
            
            /* When ever EntityManager's find() calls the state of Student instace will be "Persitent" */
            Student student = entityManager.find(Student.class, 2L);
            System.err.println("Student First Name: "+student.getFirstName());
            
            transaction.commit();
        }catch(Exception e){
            transaction.rollback();
        }finally{
            entityManager.close();
            emf.close();
        }
    }

Output :

INFO - HHH000397: Using ASTQueryTranslatorFactory
Hibernate: select student0_.ID as ID1_0_0_, student0_.CONTACT_NO as CONTACT_2_0_0_, student0_.FNAME as FNAME3_0_0_, student0_.LNAME as LNAME4_0_0_ from STUDENT student0_ where student0_.ID=?
Student First Name: Arnold
INFO - HHH000030: Cleaning up connection pool [jdbc:mysql://localhost:3306/jpa_JBD]

Finding an Entity Code Example 2 :

In the following example once you retrieve entity change the value of first name, you will notice that value will be reflected in persistence context.

public class App 
{
    public static void main( String[] args )
    {
    	EntityManagerFactory emf = null;
		EntityManager entityManager = null;
		EntityTransaction transaction = null;
		
		try{
			emf = Persistence.createEntityManagerFactory("jbd-pu");
			entityManager = emf.createEntityManager();
			transaction = entityManager.getTransaction();
			transaction.begin();
			
			/* When ever EntityManager's find() calls the state of Student instace will be "Persitent" */
			Student student = entityManager.find(Student.class, 2L);
			System.out.println("Student First Name: "+student.getFirstName());
			student.setFirstName("Peter"); // value reflects in persistence context
			
			student = entityManager.find(Student.class, 2L);
			System.out.println("Student First Name: "+student.getFirstName());
	
			transaction.commit();
		}catch(Exception e){
			transaction.rollback();
		}finally{
			entityManager.close();
			emf.close();
		}
    }
}

Output :

You will see like following output in console.

Hibernate: select student0_.ID as ID1_0_0_, student0_.CONTACT_NO as CONTACT_2_0_0_, student0_.FNAME as FNAME3_0_0_, student0_.LNAME as LNAME4_0_0_ from STUDENT student0_ where student0_.ID=?
Student First Name: Arnold
Student First Name: Peter
Hibernate: update STUDENT set CONTACT_NO=?, FNAME=?, LNAME=? where ID=?

Download Application – JPA-Entity-Retrieve.zip (10 KB)

Satish Varma
Satish Varmahttps://javabydeveloper.com
Satish is post graduated in master of computer applications and experienced software engineer with focus on Spring, JPA, REST, TDD and web development. Follow him on LinkedIn or Twitter or Facebook

2 COMMENTS

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Stay in Touch

Categories