2016-05-16 2 views
0

Я хочу создать удаленный EJB для класса сущности. Есть ли способ реализации метода с одним параметром beign - объект класса, который специально имеет аннотацию @Entity? Цель этого - создать только один компонент для всех моих сущностей.Java - параметр объекта в методе должен иметь аннотацию @Entity

Пример:

public void save(Entity ent){ 
    em.persist(ent); 
} 

ответ

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

Источник: Создание страниц JSF из классов сущностей в Netbeans.

Смежные вопросы