我是JPA的新手.根据我的理解,JPA本身不能做持久性.它需要JPA Provider才能将数据保存到数据库中.
JPA Provider:它是包含JPA flavor(javax.persistence)的供应商产品.例如Eclipselink,Toplink,Hibernate等 http://www.tutorialspoint.com/jpa/jpa_orm_components.htm
因此,任何想要使用JPA进行持久化的应用程序都必须使用Eclipselink,Toplink,Hibernate等提供程序.它是否正确?
为了提供进一步的解释,JPA是在JCP框架中指定的API作为请求的答案(例如JPA 2.1的JSR 338).
存在该规范的几种实现,主要是:
在Java平台的框架中,当实现标准API时,这是通过名为SPI(用于服务提供者接口)的系统指定的.实现的每个"供应商"必须提供特定组件,该组件是单个接口,作为实现类的起点.Java教程包含声音API的示例.必须在名称为META-INF/services/{{MyFullInterfaceName}}之后的ClassLoader可用文件中提及实现类.
对于JPA API,此起点是PersistenceProvider接口(请注意包名称中的spi部分).每个实现都包含实现类的声明,例如,在eclipselink.jar中,您可以找到一个文件META-INF/services/javax.persistence.spi.PersistenceProvider(以完整的接口名称命名),其中只包含全名在EclipseLink的情况下,提供者实现类:
org.eclipse.persistence.jpa.PersistenceProvider
Run Code Online (Sandbox Code Playgroud)
大多数情况下,API的应用程序客户端不必关心该声明,因为它包含在实现JAR中.应用程序必须使用这种文件的唯一情况是必须使用多个实现时,例如使用EclipseLink和Hibernate:
org.eclipse.persistence.jpa.PersistenceProvider
org.hibernate.ejb.HibernatePersistence
Run Code Online (Sandbox Code Playgroud)
您可以找到persistence.xml文件(<provider />标记)中指定的实现类.
有时,JPA提供程序表达式用于指代"供应商"(EclipseLink,Hibernate等)而不是软件组件.根据具体情况,两者都可视为有效.
没错,JPA是持久性标准的规范。和许多供应商一样,您已经实现了该规范,就像您提到的那样,不过请注意,EclipseLink基于TopLink,进一步的开发工作将主要集中在EclipseLink上。
尽管没有提供程序就无法使用JPA,但是可以直接使用供应商实现,但是比将自己锁定到特定的提供程序上,会损失一些好处(例如可移植性),但还会获得一些好处(例如超出规范的功能)。
实际上,尽管您的问题用不同的措词已在此处得到回答,但 JPA和Hibernate有什么区别? 从以下线程出现以下博客 :http://blog-tothought.rhcloud.com//post/2
| 归档时间: |
|
| 查看次数: |
16884 次 |
| 最近记录: |