【问题标题】:implement public void edit(T entity) AbstractFacade java实现 public void edit(T entity) AbstractFacade java
【发布时间】:2015-04-15 16:18:13
【问题描述】:

我正在尝试理解外观模式

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)

remove 方法也一样

public void remove(T entity)

做这个

public void remove(long id)

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

【问题讨论】:

    标签: java facade


    【解决方案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();
         }
    }
    

    【讨论】:

    • yes sasha,我如何获得要编辑的 ID,我的单条记录??
    猜你喜欢
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 2018-07-28
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 2013-03-31
    相关资源
    最近更新 更多