Generic DAO

This is based on Generic Data Access Objects on Hibernate forums. I modified it for JPA.

import java.lang.reflect.ParameterizedType;
import javax.persistence.EntityManager;

public abstract class GenericDAOImpl {
private Class persistentClass;
protected EntityManager em;

@SuppressWarnings("unchecked")
public GenericDAOImpl(EntityManager emgr) {
this.persistentClass = (Class) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
this.em = emgr;
}

public T findById(ID id) {
T entity = em.find(persistentClass, id);
return entity;
}

public void create(T entity) {
em.persist(entity);
}

public void update(T entity) {
em.merge(entity);
}

public void remove(T entity) {
em.remove(entity);
}
}

Source of info: http://community.jboss.org/wiki/GenericDataAccessObjects#The_DAO_interfaces