简单CRUD的EJB 3会话Bean设计

我正在编写一个应用程序,它的唯一目的是为了维护数据库中的记录而进行CRUD操作。 某些表/实体之间存在关系。 我见过的用于创建会话bean的大多数示例都涉及与我没有的许多实体交互的复杂业务逻辑/操作。

由于我的应用程序非常基础,会话bean的最佳设计是什么?

我想每个实体有一个会话bean,它有CRUD定义的方法。 然后我想把所有这些会话bean组合成一个会话bean。 然后我发现这个博客条目很吸引人,但我必须承认我不了解所有这些(什么是ServiceFacade?)。

我倾向于会话bean /实体类,但希望听到更多有经验的意见。

谢谢。


哎呀,这是博客链接: http : //www.adam-bien.com/roller/abien/entry/generic_crud_service_aka_dao

不确定你在谈论什么博客条目:)但在你的特殊情况1 ,我可能会使用一个会话bean实现类似于以下的接口:

public interface GenericCrudService { public  T create(T t); public  T find(Class type, Object id); public  void delete(T t); public  T update(T t); public List findWithNamedQuery(String queryName); public List findWithNamedQuery(String queryName, int resultLimit); public List findWithNamedQuery(String namedQueryName, Map parameters); public List findWithNamedQuery(String namedQueryName, Map parameters, int resultLimit); public  List findWithNativeQuery(String sql, Class type); } 

豆子将如下:

 @Stateless @Remote(GenericCrudService.class) @TransactionAttribute(TransactionAttributeType.MANDATORY) public class GenericCrudServiceBean implements GenericCrudService { @PersistenceContext private EntityManager em; @Override public  T create(T t) { em.persist(t); return t; } @Override public  T find(Class type, Object id) { return em.find(type, id); } @Override public  void delete(T t) { t = em.merge(t); em.remove(t); } @Override public  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 parameters) { return findWithNamedQuery(namedQueryName, parameters, 0); } @Override public List findWithNamedQuery(String namedQueryName, Map parameters, int resultLimit) { Query query = this.em.createNamedQuery(namedQueryName); if(resultLimit > 0) { query.setMaxResults(resultLimit); } for (Map.Entry entry : parameters.entrySet()) { query.setParameter(entry.getKey(), entry.getValue()); } return query.getResultList(); } @Override @SuppressWarnings("unchecked") public  List findWithNativeQuery(String sql, Class type) { return em.createNativeQuery(sql, type).getResultList(); } } 

也可以看看

  • 使用Java EE 5的通用CRUD组件
  • 不要重复DAO! – 使用Hibernate和Spring DAO构建generics类型安全DAO

1大多数应用程序不应将原始CRUD直接暴露给客户端,而是将CRUD屏蔽在实现业务规则和封装对域存储( EntityManager )的访问的服务之后。