由于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保持一致?
答案 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
另一个实现不是相关的期望。