如果JPA真的只是一个规范,那我们该怎么办?

时间:2014-07-01 13:56:37

标签: java spring hibernate jpa

在EVERYBODY下面的问题

What's the difference between JPA and Hibernate?

告诉JPA是规范。没有Eclipselink或Hibernate

是抽象的东西

JPA javax.persistence.sth对吗?

此外,我们可以使用像

这样的具体内容

javax.persistence.EntityManager.persiste javax.persistence.EntityManager.delete /删除

修改

eclipselink和hibernate是否将自己的代码放入这些类中,这些类???

2 个答案:

答案 0 :(得分:2)

JPA是一个规范,许多实现者提供遵循规范的实现。

因此,如果您使用JPA,那么您可以从一个或多个实现者中进行选择,它应该“即插即用”工作。换句话说,您不必更改代码,因为实现将执行规范所承诺的内容。

---至于JPA和Hibernate之间的区别---

JPA是一个规范,但Hibernate是一个实现。如果您针对JPA编写,则可以轻松地在兼容JPA的实现之间进行更改;但是,如果你反对Hibernate,要有效地改变你需要重写你的数据库访问代码。

请注意,Hibernate还提供了一些JPA兼容性,如果你只注意使用Hibernate的JPA兼容部分,你实际上是在用Hibernate编写JPA来提供实现。

有一个用于进行JPA开发的方法,可以很好地防止编写非JPA(特定于实现的)代码。

  1. 找到您要定位的JPA版本的JPA jar。
  2. 将该jar添加到编译类路径和运行时类路径。
  3. 找到您想要使用的JPA提供程序(Hibernate等)。
  4. 仅将那些/那些jar添加到运行时类路径中。

答案 1 :(得分:0)

JPA是JCP(Java Community Process)作为JSR(Java规范请求)发布的Java Persistence API。

这是一种规范;换句话说就像界面一样,没有实现包括。

对此规范感兴趣的每个供应商(实现者)都需要按照规范文档中的说法实现。

以下是示例JPA 2.0 spec