我开始使用 JPA,但我对 JPA 实现(EclipseLink、TopLink、Hibernate 等)究竟做了什么感到困惑。
我了解 JPA 的理论作用,但各种实现的目的是什么?这些选择之间是否存在显着差异,例如 DB 连接器/驱动程序?哪个最适合初学者?
我可能会选择 EclipseLink,因为我读过的大多数文献都使用 EclipseLink。
最佳答案
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/