I´m trying to understand the facade pattern
public abstract class AbstractFacade<T> {
private Class<T> entityClass;
public AbstractFacade(Class<T> entityClass) {
this.entityClass = entityClass;
}
protected abstract EntityManager getEntityManager();
public void create(T entity) {
getEntityManager().persist(entity);
}
public void edit(T entity) {
getEntityManager().merge(entity);
}
public void remove(T entity) {
getEntityManager().remove(getEntityManager().merge(entity));
}
public T find(Object id) {
return getEntityManager().find(entityClass, id);
}
public List<T> findAll() {
javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
return getEntityManager().createQuery(cq).getResultList();
}
public List<T> findRange(int[] range) {
javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
javax.persistence.Query q = getEntityManager().createQuery(cq);
q.setMaxResults(range[1] - range[0] + 1);
q.setFirstResult(range[0]);
return q.getResultList();
}
public int count() {
javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
javax.persistence.criteria.Root<T> rt = cq.from(entityClass);
cq.select(getEntityManager().getCriteriaBuilder().count(rt));
javax.persistence.Query q = getEntityManager().createQuery(cq);
return ((Long) q.getSingleResult()).intValue();
}
}
using netbeans wizard, but I dont understand why send T entity to this void;
public void edit(T entity)
and no a id for this
public void edit(long id)
same for the remove method
public void remove(T entity)
and make this
public void remove(long id)
how can I implement the void Edit in my bean controller?
If I understand your questions correctly:
Why
send(T entity)
returnsvoid
and doesn't require ID?
Because entity
passed as argument already contains ID and will overwrite entity which have the same ID in DB table
Same for the
remove(T entity)
method
Same for this. If you don't have an entity, just ID, then to remove entity by ID, you need to create new empty entity, assign ID and pass it to remove()
method.
how can I implement the void Edit in my bean controller?
Here, you don't need to implement anything except getEntityManager()
method. Kind of:
public class MyFacade extends AbstractFacade<MyEntityClass> {
@Resource
EntityManagerFactory emf;
@Override
EntityManager getEntityManager() {
return emf.createEntityManager();
}
}