实施 public void edit(T entity) AbstractFacade java

implement public void edit(T entity) AbstractFacade java

我正在尝试了解外观模式

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 实体发送到此空间;

public void edit(T entity)

并且没有此

的 ID
public void edit(long id)

删除方法相同

public void remove(T entity)

然后做这个

public void remove(long id)

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

如果我正确理解你的问题:

Why send(T entity) returns void and doesn't require ID?

因为作为参数传递的 entity 已经包含 ID 并将覆盖数据库中具有相同 ID 的实体 table

Same for the remove(T entity) method

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

how can I implement the void Edit in my bean controller?

在这里,除了 getEntityManager() 方法外,您不需要实现任何东西。种类:

public class MyFacade extends AbstractFacade<MyEntityClass> {

     @Resource
     EntityManagerFactory emf;

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