2016-05-16 115 views

回答

1

如果你只是有1个EJB当你必须处理它们中的一些以特殊的方式,你很快就会遇到问题的所有实体。

但是你可以用抽象超级ejb做这个,每个实体仍然有1个ejb,但它很容易创建。而且您仍然可以覆盖默认的继承方法。

public abstract class AbstractEjb<T> { 
    private Class<T> entityClass; 

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

} 

要实现对实体只是做

@Stateless 
public class TestEjb extends AbstractEjb<TestEntity> { 

    @PersistenceContext(unitName = "...") 
    private EntityManager em; 

    public TestEjb() { 
     super(TestEntity.class); 
    } 

    public EntityManager getEntityManager() { 
     return em; 
    } 
} 

来源:生成的Netbeans从实体类JSF页面。

相关问题