Interview Questions

Basic Example Using JPA

The following code example illustrates creating/upating database tables using JPA.
The two tables used are Employee and Department. When the main class EmpDAO is run the tables get created in the database and the table records can be queried using JPA API's. Hibernate has been used as implementation for JPA. The dependency jars are referred in the pom.xml.

Employee.java

import java.util.Date;
import java.util.UUID;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
public class Employee {

       
        @Id
        private String empId = UUID.randomUUID().toString();
       
        private String empName;
       
        @Temporal(value = TemporalType.TIMESTAMP)
        private Date doj;
       
        @ManyToOne
        private Department department;
       

        public String getEmpId() {
                return empId;
        }

        public void setEmpId(String empId) {
                this.empId = empId;
        }

        public String getEmpName() {
                return empName;
        }

        public void setEmpName(String empName) {
                this.empName = empName;
        }

        public Date getDoj() {
                return doj;
        }

        public void setDoj(Date doj) {
                this.doj = doj;
        }

        public Department getDepartment() {
                return department;
        }

        public void setDepartment(Department department) {
                this.department = department;
        }
}

Department.java

import java.util.HashSet;
import java.util.Set;
import java.util.UUID;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;



@Entity
public class Department {

        @Id
        private String deptId = UUID.randomUUID().toString();
       
        private String deptName;
       
        @OneToMany(mappedBy = "department",fetch=FetchType.EAGER,cascade=CascadeType.ALL,orphanRemoval=true)
        private Set<Employee> employee=new HashSet<>();

        public String getDeptId() {
                return deptId;
        }

        public void setDeptId(String deptId) {
                this.deptId = deptId;
        }

        public String getDeptName() {
                return deptName;
        }

        public void setDeptName(String deptName) {
                this.deptName = deptName;
        }

        public Set<Employee> getEmployees() {
                return employee;
        }

        public void setEmployees(Set<Employee> employees) {
                this.employee = employees;
        }
       
}

EmpDAO.java

import java.util.Date;
import java.util.Iterator;
import java.util.List;

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

public class EmpDao {

        // @PersistenceContext
        protected EntityManager entityManager;

        public void addEmp(Employee emp) {
                System.out.println("entered add Emp method -> ");
                entityManager.persist(emp);
        }

        public static void main(String[] args) {

                EntityManagerFactory emf = Persistence
                                .createEntityManagerFactory("EmpPersistence");

                EntityManager em = emf.createEntityManager();

                try {

                        EntityTransaction entr = em.getTransaction();

                        entr.begin();

                        Department dept = new Department();
                        dept.setDeptName("Finance");
                        em.persist(dept);

                        Employee emp = new Employee();
                        emp.setEmpName("raju");
                        emp.setDoj(new Date());
                        emp.setDepartment(dept);
                        em.persist(emp);

                        Query query = em.createQuery("SELECT em FROM Employee em ");

                        // query.setParameter("roll", 100);

                        List results = query.getResultList();

                        if (results.size() != 0) {

                                Iterator stIterator = results.iterator();

                                while (stIterator.hasNext()) {

                                        Employee st = (Employee) stIterator.next();

                                        System.out.print("sname:" + st.getEmpName());

                                        System.out.println("sdoj:" + st.getDoj());

                                        System.out.println("deptId:"
                                                        + st.getDepartment().getDeptId());

                                }

                        }

                        else {

                                System.out.println("Record not found.");

                        }

                        entr.commit();

                }

                finally {

                        em.close();

                }

        }

}

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence 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 <a href="http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
" title="http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"

">http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
</a>             version="2.0">

        <persistence-unit name="EmpPersistence"
                transaction-type="RESOURCE_LOCAL">
                <provider>org.hibernate.ejb.HibernatePersistence</provider>
                <properties>
                <property name="hibernate.connection.driver_class"
                        value="com.mysql.jdbc.Driver"/>
                <property name="hibernate.connection.url"
                        value="jdbc:mysql://localhost:3306/company"/>
                <property name="hibernate.connection.username"
                        value="company"/>
                <property name="hibernate.connection.password"
                        value="company"/>
                <property name="hibernate.dialect"
                        value="org.hibernate.dialect.MySQLDialect"/>
                <property name="hibernate.show_sql"
                        value="true"/>
               
                <property name="hibernate.hbm2ddl.auto" value="update" />
                </properties>
                </persistence-unit>
</persistence>

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 <a href="http://maven.apache.org/xsd/maven-4.0.0.xsd">
" title="http://maven.apache.org/xsd/maven-4.0.0.xsd">
">http://maven.apache.org/xsd/maven-4.0.0.xsd">
</a>  <modelVersion>4.0.0</modelVersion>

  <groupId>com.tdd.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0</version>
  <packaging>jar</packaging>

  <name>Maven Quick Start Archetype</name>
  <url>http://maven.apache.org</url>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.2</version>
      <scope>test</scope>
    </dependency>
    <dependency>
                        <groupId>org.hibernate.javax.persistence</groupId>
                        <artifactId>hibernate-jpa-2.0-api</artifactId>
                        <version>1.0.1.Final</version>
                </dependency>
                <dependency>
                        <groupId>org.hibernate</groupId>
                        <artifactId>hibernate-entitymanager</artifactId>
                        <version>4.1.6.Final</version>
                </dependency>
    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.18</version>
                </dependency>
  </dependencies>
</project>