【问题标题】:Using JPA Entity in client/presentation layer without JPA API在没有 JPA API 的客户端/表示层中使用 JPA 实体
【发布时间】:2013-07-07 11:38:37
【问题描述】:

我想将 JPA 实体类用作简单的 POJO/数据持有者对象,以传递给企业应用程序的其他层/客户端。

这可以在没有其他层/客户端在类路径上有 JPA API jar 的情况下完成吗?(只有包含实体类的 jar)?还是他们需要这个来解决以下问题:

@OneToMany(mappedBy="owner",fetch=FetchType.EAGER) 在实体源代码中?

如果在客户端/表示层中需要 JPA API,它只是打算与作为 POJO 的实体一起使用,那么避免这种依赖 JPA API 的必要性的最佳解决方案/替代方案是什么?

编辑:只是为了让它更清楚。我在询问 JPA API 无法访问的 java ee 环境之外的可能解决方案。我可以避免为每个要发送到没有 JPA API 的标准 java 客户端的实体类编写 DTO 吗?

【问题讨论】:

    标签: jakarta-ee jpa ejb


    【解决方案1】:

    如果您与其他类路径上没有持久性 API 的应用程序共享您的实体类,那么它们将无法加载您的类。那是因为 JVM 将无法解析注释类。

    但是,如果我们谈论的是 Java EE 意义上的企业应用程序,那么它们都应该在其类路径中包含持久性 API,因为它是标准的一部分。该 API 由所有 Java EE 应用程序服务器提供。在这种情况下,请将实体类放在 EAR 的 lib/ 目录内的 JAR 文件中,以便与项目的所有模块共享。

    参考资料:

    【讨论】:

    • 这正是我要问的谢谢。我知道在服务器内部它可以工作。但我对在其类路径上没有 JPA API 的外部 java 客户端的解决方案感兴趣。所以我必须为每个我打算序列化的实体创建特殊的 DTO 并发送到不存在 JPA API 的地方?
    • 这将是一种选择。为避免重复代码,您可以使用 XML 而不是注释来配置您的 JPA 实体。这样,它们实际上是没有注释的 POJO,可以共享。有关其外观的示例,请参阅this question。如果愿意,您甚至可以混合使用基于注释和基于 XML 的配置。
    • 好的。谢谢你。这证实了我的假设以及如何处理这种情况的可能选择。
    猜你喜欢
    • 1970-01-01
    • 2015-05-10
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 2021-06-08
    • 2019-07-08
    相关资源
    最近更新 更多