【问题标题】:JPA CDI Injecting DAO into an EntityJPA CDI 将 DAO 注入实体
【发布时间】:2012-04-18 14:19:55
【问题描述】:

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

我知道如何注入 bean 并保持一切整洁和无状态。我还知道 JPA 会为我加载关系等,这样我就不必再担心了。我仍然将我的 DAO 用于特定的查找方法,当然还可以创建新实体。

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    如果GroupUsers,则将其映射为一个集合(可能是OneToMany)。

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

    This tutorial 应该给你一个开始。

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

    当然不一定。但在不知道您的要求的情况下,这有点难以判断(阅读:不可能)。我建议您添加带有更多信息的孤立问题,这样更容易讨论您的问题...

    根据经验:尝试将实体(Group、User)与业务逻辑和持久化操作(GroupService、...Dao)分开。

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

    【讨论】:

    • 目前我的组有一个关系 (List) 和一个包含实体管理器的 UserDao。我的问题是,我的 Group 类应该有 UserDao 还是应该有一个 EJB 来管理 Dao?我还应该将我的逻辑放在 EJB 中而不是我的实体中吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    相关资源
    最近更新 更多