JPA CDI将DAO注入实体

时间:2012-04-18 14:19:55

标签: ejb entity jpa-2.0 java-ee-6 cdi

我是JPA和CDI的新手,我正在尝试使用这些框架创建企业应用程序。

我得到了如何注入豆类并保持一切整洁和无状态。我也得到JPA为我加载关系等,这样我就不用再担心了。我仍然使用我的DAO用于特定的查找方法和当前创建新实体。

我知道我不想将内容注入我的实体,因为它们是由JPA管理的,我需要使用new关键字来创建一个新实体(而不是加载)。

我习惯用其他类来管理我的实体,例如,如果我们有一个User和一个Group,我使用无状态bean来管理组(创建新的,找到一些等),这个无状态bean使用我的DAO检索和发送数据。

我使用Group实体来管理用户(可能这是错的?)但我不想将DAO注入到Group中,因为它是一个实体。我知道这个设计有问题,但我找不到最好的做法。

所有管理类都应该是EJB吗?我习惯为我的逻辑创建Domain类,我应该抛弃这个概念,将所有逻辑放在EJB中并使用实体来保存数据吗?

1 个答案:

答案 0 :(得分:1)

  

我使用Group实体来管理用户(也许这是错的?)但是   我不想将DAO注入集团,因为它是一个实体。一世   我知道这个设计有问题,但我找不到最好的   为此练习。

如果GroupUser s,请将其映射为集合(可能是OneToMany)。

使用另一个不同的bean来封装持久性操作,例如:一个GroupServiceGroupDao。在这个bean中,你将注入一个EntityManger,它负责持久性(“管理用户和组”)。

This tutorial应该给你一个开始。

  

所有管理类都应该是EJB吗?

当然不一定。但是在不知道你的要求的情况下告诉它有点困难(阅读:不可能)。我建议您添加更多信息的孤立问题,然后更容易讨论您的问题...

根据经验:尝试将实体(组,用户)与业务逻辑和持久性操作(GroupService,... Dao)分开。

我发现this book提供了关于后期J2EE模式的出色概述和讨论。