2015-04-15 32 views
1

我正嘗試瞭解使用NetBeans嚮導Facade模式實現公共無效編輯(T實體)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(); 
    } 
} 

,但我不明白爲什麼送牛逼實體這一空白;

public void edit(T entity) 

併爲此

public void edit(long id) 

同爲remove方法

public void remove(T entity) 

沒有一個ID,使這個

public void remove(long id) 

我怎麼能實現在虛空編輯我的bean控制器?

回答

0

如果我正確理解你的問題:

爲什麼send(T entity)回報void而且不需要ID?

因爲entity作爲參數傳遞已經包含了ID,且將覆蓋其在數據庫表中的相同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(); 
    } 
} 
+0

是sasha,以及如何獲得編輯的id,我的單個記錄? – ger