经过一番思考,似乎DAO实际上并不是我想做的事情的正确名称。也许它真的是一个门面,正如帕斯卡所说。我刚刚找到了 Netbeans Petstore 示例 - 一个 JavaEE6 示例应用程序,请参阅此处 - 其中他们有一个 ItemFacade,负责从数据库中查找/创建/删除实体。这是一个无状态会话豆。看起来像这样:
@Stateless
public class ItemFacade implements Serializable {
@PersistenceContext(unitName = "catalogPU")
private EntityManager em;
public void create(Item item) { ... }
public void edit(Item item) { ... }
public void remove(Item item) { ... }
public Item find(Object id) { ... }
public List<Item> findAll() { ... }
public List<Item> findRange(int maxResults, int firstResult) { ... }
public int getItemCount() { ... }
}
因此,作为一个结论,我不再称我的DAO DAO,而只是例如PersonEJB(我认为“PersonFacade”可能会被误解),并使其也@Stateless,因为我认为Netbeans示例可以被认为是精心设计的。