繁体   English   中英

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

[英]Differentiation between javax.persistence, javax.persistence-api and javaee-api

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

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

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

任何澄清我都会很高兴。

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。Wikipedia还对Web配置文件的API版本进行了比较,这可能会让事情变得清晰(Web配置文件是Java EE的一个子集)规格)。
  • 我不知道JPA 2.1 / 2.2版本之间的兼容性。 我总是使用相同的实现版本。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM