Pojo is Employee
Code:
/**
*
*/
package com.model;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
/**
* @author singhk
*
*/
@Entity
@Table(name = "EMPLOYEE")
@NamedQueries( { @NamedQuery(name = "findEmpByDept", query = "SELECT i FROM Employee i WHERE i.department=:department"), })
@SequenceGenerator(initialValue = 1, name = "employeeIdSeq", sequenceName = "EMPLOYEE_ID_SEQ")
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "employeeIdSeq", strategy = GenerationType.SEQUENCE)
private Long id;
@Column(name = "name", nullable = false)
private String name;
@Column(name = "department", nullable = false)
private String department;
public Employee() {
super();
}
public Employee(String name, String department) {
super();
this.name = name;
this.department = department;
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
}
And this is its DAO:
Code:
/**
*
*/
package com.model.daoImpl;
import java.util.List;
import com.model.Employee;
import com.model.dao.EmployeeDAO;
/**
* @author singhk
*
*/
public class EmployeeDAOImpl extends GenericDAOImpl<Employee, Long> implements
EmployeeDAO {
@SuppressWarnings("unchecked")
public List<Employee> findEmpByDept(String department) {
return getEntityManager().createNamedQuery("findEmpByDept")
.setParameter("department", department).getResultList();
}
}
And this is what is meant by :common logic goes to parent-abstract DataAccessObjects
Code:
package com.model.daoImpl;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import com.model.dao.GenericDAO;
public abstract class GenericDAOImpl<T, ID extends Serializable> implements GenericDAO<T,ID>
{
private Class<T> entityBeanType;
private EntityManager em;
@SuppressWarnings("unchecked")
public GenericDAOImpl()
{
this.entityBeanType = (Class<T>) ( (ParameterizedType) getClass().getGenericSuperclass() ).getActualTypeArguments()[0];
}
@PersistenceContext
public void setEntityManager(EntityManager em)
{
this.em = em;
}
public EntityManager getEntityManager()
{
return em;
}
public T findById(ID id)
{
T entity;
entity = getEntityManager().find( getEntityBeanType(), id );
return entity;
}
@SuppressWarnings("unchecked")
public List<T> findAll()
{
List<T> allEntities = getEntityManager().createQuery( "from " + getEntityBeanType().getName() ).getResultList();
return allEntities;
}
public void clear()
{
getEntityManager().clear();
}
protected Class<T> getEntityBeanType()
{
return entityBeanType;
}
}