【问题标题】:Do JPA impementor implement javax.persistence.Entity annotation?JPA impementor 是否实现 javax.persistence.Entity 注释?
【发布时间】:2016-09-09 06:23:47
【问题描述】:

我对谁提供 JPA @Entity annotation 有一些疑问。

我了解 JPA 是 ORM 工具(如 hibernate)的标准规范,这些工具实现了 JPA 规范。

现在在我的简单项目中,我有一个导入语句:

import javax.persistence.Entity;

我的印象是,因为它是“标准”(JPA)规范,所以会有 JDK 提供的一些 jar 会包含这个 Annotation 定义。我在 JDK 中的各种 jar 中进行了搜索,但没有任何具有 Entity.class 的 .jar 文件。

在 hibernate 中,有一个 jar 具有此 Entity annotation 的定义(jar --> hibearnate-jpa-XX.jar)

那么,这是否意味着这些标准规范不是 JDK 的一部分,而是由规范实施者提供的?

【问题讨论】:

  • javax.persistence.Entity 是 persistence-api.jar 中提供的一个 ANNOTATION 没有人“实现它”。 JPA 不在 JDK 中
  • 感谢您的回复。我的意思是谁“编写”了 Entity 注释的代码。那么这是否意味着,实现这些规范的提供者提供了所有这些的代码?对我来说,看起来是这样。我认为(我认为是错误的印象)规范的接口是由 JDK 提供的(导入的来源),而实际的实现来自实现规范的提供者。我想解开这些疑惑,如果你能扩展一下,会很有帮助的。
  • JPA 专家组应该负责提供规范、API jar 和 TCK。在 JPA 2.0 和 JPA 2.1 的情况下,他们没有提供 API jar(由于懒惰)并将其留给 JPA 实现来提供 API jar 以及他们的 JPA 实现(因此那里有很多 JPA API jar,一个用于 Hibernate,一个用于 EclipseLink,一个用于 DataNucleus ......名义上都是一样的)。
  • @NeilStockton 非常感谢您的回复,事情比以前更清楚了。顺便问一下,TCK 是什么?我搜索了这个,得到了一些奇怪的结果,比如“第三文化孩子!”。

标签: java hibernate jpa entity


【解决方案1】:

JPA 规范由 JCP 和一个“专家组”编写。专家组负责提供规范(文档)、API jar(规范中定义的接口、注释)和用于确认实现是否正确实现规范的 TCK(测试兼容性工具包)。在 JPA 的情况下,“TCK”是秘密的,因此公众无法测试 JPA 提供者的合规性(弄清楚他们为什么这样做)。

API jar 包括 @Entity 注释以及规范中定义的所有其他内容。

对于 JPA 1.0,专家组提供了 API jar,seen here。 对于 JPA 2.0 和 JPA 2.1,由于懒惰,专家组没有提供 API jar。因此,DataNucleusHibernateEclipseLink 等 JPA 提供者必须在其 JPA 实现的同时提供自己的 API jar。因此,您应该在 JPA 提供程序 API jar 中找到 @Entity 注释。例如在DataNucleus JPA API jar

【讨论】:

  • 非常感谢您提供详细的答案,以及您的 cmets。我希望我能把你的答案加倍。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-07
  • 1970-01-01
  • 2010-09-21
  • 2011-03-04
  • 2019-01-21
  • 1970-01-01
相关资源
最近更新 更多