对于JPA API而言,起始点是PersistenceProvider接口(请注意包名称中的spi部分)。每个实现都包括实现类的声明,例如在eclipselink.jar中,您可以找到一个名为META-INF/services/javax.persistence.spi.PersistenceProvider(以完整接口名称命名)的文件,其中仅包含提供程序实现类的完整名称,在EclipseLink的情况下:
org.eclipse.persistence.jpa.PersistenceProvider
大多数情况下,API的应用客户端不必关心该声明,因为它已包含在实现JAR中。唯一需要使用这种类型文件的情况是当需要使用多个实现时,例如EclipseLink和Hibernate。
org.eclipse.persistence.jpa.PersistenceProvider
org.hibernate.ejb.HibernatePersistence
在persistence.xml文件中也指定了实现类(<provider/>标签)。
有时,JPA提供程序表达式用于引用“供应商”(EclipseLink、Hibernate等),而不是软件组件。根据上下文,两者都可以被视为有效。