不知道您在谈论什么博客条目:)但是在您的特定情况1下,我可能会使用单个会话bean来实现类似于以下内容的接口:
public interface GenericCrudService { public <T> T create(T t); public <T> T find(Class<T> type, Object id); public <T> void delete(T t); public <T> T update(T t); public List findWithNamedQuery(String queryName); public List findWithNamedQuery(String queryName, int resultLimit); public List findWithNamedQuery(String namedQueryName, Map<String, Object> parameters); public List findWithNamedQuery(String namedQueryName, Map<String, Object> parameters, int resultLimit); public <T> List<T> findWithNativeQuery(String sql, Class<T> type);}Bean将如下所示:
@Stateless@Remote(GenericCrudService.class)@TransactionAttribute(TransactionAttributeType.MANDATORY)public class GenericCrudServiceBean implements GenericCrudService { @PersistenceContext private EntityManager em; @Override public <T> T create(T t) { em.persist(t); return t; } @Override public <T> T find(Class<T> type, Object id) { return em.find(type, id); } @Override public <T> void delete(T t) { t = em.merge(t); em.remove(t); } @Override public <T> T update(T t) { return em.merge(t); } @Override public List findWithNamedQuery(String queryName) { return em.createNamedQuery(queryName).getResultList(); } @Override public List findWithNamedQuery(String queryName, int resultLimit) { return em.createNamedQuery(queryName).setMaxResults(resultLimit) .getResultList(); } @Override public List findWithNamedQuery(String namedQueryName, Map<String, Object> parameters) { return findWithNamedQuery(namedQueryName, parameters, 0); } @Override public List findWithNamedQuery(String namedQueryName, Map<String, Object> parameters, int resultLimit) { Query query = this.em.createNamedQuery(namedQueryName); if(resultLimit > 0) { query.setMaxResults(resultLimit); } for (Map.Entry<String, Object> entry : parameters.entrySet()) { query.setParameter(entry.getKey(), entry.getValue()); } return query.getResultList(); } @Override @SuppressWarnings("unchecked") public <T> List<T> findWithNativeQuery(String sql, Class<T> type) { return em.createNativeQuery(sql, type).getResultList(); }}也可以看看
- Java EE 5的通用CRUD组件
- 不要重复DAO!-使用Hibernate和Spring DAO构建通用的类型安全DAO
1大多数应用程序不应将原始CRUD直接暴露给客户端,而应将CRUD屏蔽在实现业务规则并封装对域存储(
EntityManager)访问权限的服务之后。



