2012-04-18 70 views
2

我是JPA和CDI的新手,我尝试使用这些框架创建企业应用程序。JPA CDI将DAO注入到实体

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

据我所知,我不想注入到我的实体的东西,因为他们由JPA管理,我需要使用关键字new创建一个新的实体(而不是加载)。

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

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

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

回答

1

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

如果一个GroupUser s,将它映射为一个集合(可能是OneToMany)。

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

This tutorial应该给你一个开始。

是否所有管理类都是EJB?

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

作为一个经验法则:尝试从业务逻辑和持久性操作中分离实体(组,用户)(GroupService,。 ..Dao)。

我发现this book给出了关于post J2EE模式的极好的概述和讨论。

+0

目前我的团队有一个关系(列表)和一个UserDao其中包含entitymanager。我的问题是,如果我的Group类有UserDao,或者我应该有一个管理Dao的EJB?我也应该把自己的逻辑放在EJB中而不是放在我的实体中? – Rob 2012-04-18 14:55:10