实现public void edit(T实体)AbstractFacade java

时间:2015-04-15 16:18:13

标签: java facade

我正在尝试了解外观模式

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();
    }
}

使用netbeans向导,但我不明白为什么将T实体发送到此void;

public void edit(T entity)

并且没有此

的ID
public void edit(long id)

删除方法

相同
public void remove(T entity)

并制作此

public void remove(long id)

如何在bean控制器中实现void Edit?

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题:

  

为什么send(T entity)会返回void并且不需要ID?

因为作为参数传递的entity已经包含ID并且将覆盖在DB表中具有相同ID的实体

  

remove(T entity)方法

相同

同样的。如果您没有实体,只有ID,那么要按ID删除实体,您需要创建新的空实体,分配ID并将其传递给remove()方法。

  

如何在bean控制器中实现void Edit?

在这里,您不需要实现除getEntityManager()方法之外的任何内容。种类:

public class MyFacade extends AbstractFacade<MyEntityClass> {

     @Resource
     EntityManagerFactory emf;

     @Override
     EntityManager getEntityManager() {
         return emf.createEntityManager();
     }
}