javax.persistence,javax.persistence-api和javaee-api之间的区别

时间:2019-03-14 18:10:15

标签: java java-ee javax.persistence

我对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的this mvn repo中下载)?

  • javaee-api in version 7.0是否已经包含javax.persistence-api,如果已经包含,哪个版本? 2.1?我如何或在哪里可以找到此信息?

  • 如果我使用的是最新的实现,例如EclipseLink 2.7.4(在2019年第一季度)表示支持JPA 2.2,那么对2.1之类的旧JPA版本是否有向后兼容性?

我很高兴得到澄清。

1 个答案:

答案 0 :(得分:0)

API依赖性用于compile您的项目。可以通过运行时(例如Java EE应用程序服务器)provided来实现,也可以构建包含该实现的应用程序。如果您不熟悉Maven范围,建议您阅读this

  • 您是对的,javax.persistence-api不包含实现。
  • that maven repo是eclipselink实现。在版本2.3中,artifactId已从“ javax.persistence”更改为“ eclipselink”。
  • javaee-api还包括JPA。可以找到Api版本,例如here:“ Java EE 7平台需要Java Persistence API 2.1。Wikipedia还比较了Web配置文件的API版本,可以清除所有内容(Web配置文件是Java EE规范的子集)。
  • 我不知道JPA 2.1 / 2.2版本之间的兼容性。我将始终使用相同的实现版本。

编辑:我想您可以在JPA 2.2运行时中运行JPA 2.1应用程序。但是,向后兼容还应该意味着没有 行为上的差异 。新版本具有更多功能,这些功能可能默认情况下处于启用状态。毕竟,Java EE都是关于“约定之上的配置”的。因此,这还取决于您对“向后兼容性”的定义。