java - 什么是 JPA 实现?

标签 java eclipse jpa eclipselink

我开始使用 JPA,但我对 JPA 实现(EclipseLink、TopLink、Hibernate 等)究竟做了什么感到困惑。

我了解 JPA 的理论作用,但各种实现的目的是什么?这些选择之间是否存在显着差异,例如 DB 连接器/驱动程序?哪个最适合初学者?

我可能会选择 EclipseLink,因为我读过的大多数文献都使用 EclipseLink。

最佳答案

JPA

JPA 只是一个需要实现才能使用的 API(因此是 Java Persistence API)。

类比是使用 JDBC。 JDBC 是一种用于访问数据库的 API,但您需要一个实现(驱动程序 jar 文件)才能连接到数据库。就其本身而言,如果没有驱动程序,您将无法对数据库进行任何操作。

正如我所说,使用 JPA,您需要一个实现,即一组位于“低于”JPA 的类,而这样的实现将满足您的需求。

您的应用程序使用 JPA API(这个措辞有点冗长,但我希望您明白),然后与底层实现进行通信。

流行的实现包括Hibernate , EclipseLink , OpenJPA和其他人。

它们中的每一个都实现了 JPA API,因此如果您只使用 JPA,则每个实现都应该执行相同的操作。

但是!这些实现提供的功能可能会超出标准 JPA API。

如果您想使用此特定功能,则必须使用与其他厂商不兼容的特定供应商 API。

例如,尽管 JPA 定义了带有 ID 生成选项的 @Id 注释,但在使用 Hibernate 时,您也可以使用 @org.hibernate.annotations.GenericGenerator Hibernate 特定的生成策略。

除非您使用 Hibernate 作为底层实现,否则使用此注解将不起作用。

底线是:JPA 是每个供应商实现的“最小公分母”,并且每个实现都可能具有一些非标准的更高级功能。

如果您希望您的应用程序具有可移植性,请仅使用 JPA。如果您确定以后不会改变主意并切换实现,请使用 JPA + 供应商特定功能。

关于java - 什么是 JPA 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4477082/

相关文章:

java - Spring Jdbctemplate 一对多数据检索

Java 1.8.121 不适用于 linux - NoClassDefFoundError

java - Eclipse(或任何 IDE)能否将类型参数引入现有类型

java - 在 Eclipse 中,如何在过滤器上键入结束时刷新 View ?

java - 如何在 JPQL 中创建使用隐式联接查询两个表的 TypedQuery?

hibernate - 一对一与多对一(单向)

java - 使用 QueryDSL JPA 在 MySQL 中查找重复的行

java - UDP 数据包 NPE - Java

java - 如何在 Android 上使用两个或多个搜索栏

java - 在 eclipse 中创建应用程序 : Error parsing XML: not well-formed (invalid token)