JPA和Hibernate方法调用

时间:2013-01-20 03:16:28

标签: java hibernate jpa

由于JPA只是一个持久的提供程序,如hibernate应该遵循的规范,我无法理解如果我们使用JPA编码,hibernate特定的调用是如何发生的。 例如,JPA EntityManager在休眠对象中与Session相同吗? 假设EM中的getTransaction()方法。我没有找到Session扩展或实现EM接口? 理想情况下它应该是调用,em.getTransaction()将多态调用子类的具体实现吗?

例如

interface A{
m();
}

class B implements A{
void m(){
//logic
}
}

class M{
A a = new B
a.m(); // this will call method m in class B
}

上面的实现如何与JPA和Hibernate保持一致?

2 个答案:

答案 0 :(得分:1)

我没看到代码用EM做什么,这只是pojo。 但是如果你想使用hibernate作为JPA impl你需要使用hibernate entitymanager jar文件。 如果你打开jar文件,Hibernate implmenets jpa的EntityManager类。 This链接来自hibernate类,它从jpa Em接口扩展而来。 您将从工厂类获得EM对象。所以工厂类知道EM impl并用反射创建impl类的对象。

This是hibernate真正的EM impl。

答案 1 :(得分:0)

  

EntityManager等同于休眠中的Session吗?

没有。它们彼此接近,因为它们分别是JPA / Hibernate世界中第一级缓存的入口点。但它们并不等同。

hibernate Session API /合约与EntityManager API不同。所以期望一个实现extends另一个实现不是相关的期望。