1

我对 javax.persistence、javax.persistence-api 和 javaee-api 的区别和内容感到困惑。javaee-api 可能包含更多,但我只对 JPA 的东西感兴趣(如果存在于 javaee-api 中)。从抽象的角度来看,有 JPA 作为规范和一些 JPA 的实现,如 eclipselink。因此,如果配置中存在两种依赖关系,则很容易理解:一种用于规范内容,一种用于实现。但这似乎有点复杂,所以我有以下问题:

  • 我假设“javax.persistence-api”包含接口之类的东西,因此 javax.persistence-api 包含 JPA 的编程内容声明而不实现规范。因此,如果我将版本 2.2 中的 javax.persistence-api 设置为依赖项(maven 或 gradle),我定义必须使用 JPA 2.2(必须由实现支持),如果我将版本 2.1 中的 javax.persistence-api 设置为依赖项,我定义必须使用/支持 JPA 2.1。那正确吗 ?

  • “javax.persistence”依赖项的目的/内容是什么(例如,可在 2.2.1 版的这个 mvn 存储库中下载)?

  • 7.0 版中的 javaee-api是否已经包含 javax.persistence-api,如果是,是哪个版本?2.1?我如何或在哪里可以发现这些信息?

  • 如果我使用最新的可能实现,例如 EclipseLink 2.7.4(2019 年第一季度),它声明它支持 JPA 2.2,是否对旧 JPA 版本(如 2.1)有任何向后兼容性?

我会很高兴任何澄清。

4

1 回答 1

0

API 依赖项用于compile您的项目。该实现可以provided由运行时(例如 Java EE 应用服务器)实现,也可以构建应用程序以包含该实现。如果你不熟悉 maven 范围,我建议你阅读这篇文章。

  • 你是对的,javax.persistence-api不包括实施。
  • 那个maven repo是一个eclipselink实现。artifactId 在 2.3 版中从“javax.persistence”更改为“eclipselink”。
  • javaee-api还包括 JPA。例如,可以在此处找到 Api 版本:“ Java EE 7 平台需要 Java Persistence API 2.1。维基百科还比较了 Web 配置文件的 API 版本,这可能会让事情变得清晰(Web 配置文件是 Java EE 的一个子集)规格)。
  • 我不知道 JPA 2.1/2.2 版本之间的兼容性。我总是使用相同的实现版本。

编辑:我猜你可以在 JPA 2.2 运行时中运行 JPA 2.1 应用程序。但是,向后兼容也应该意味着没有行为差异。新版本有更多功能,这些功能可能默认启用。毕竟,Java EE 都是关于“约定优于配置”的。所以这也取决于你对“向后兼容性”的定义。

于 2019-03-14T20:57:58.427 回答