-2

如果我们可以使用 javax.persistence.* 完成本机 Java 支持的 ORM,那么使用诸如 hibernate 之类的提供程序的真正优势是什么?

java持久化与hibernate这本书说,

Hibernate EntityManager is a wrapper around Hibernate Core that provides the
JPA programming interfaces, supports the JPA entity instance lifecycle, and allows
you to write queries with the standardized Java Persistence query language.

这里的 Hibernate EntityManager 这个名字让我很困惑。EntityManager 是否属于休眠?

以下是如何通过 java 持久化来持久化域对象,

EntityManagerFactory emf =
Persistence.createEntityManagerFactory("helloworld");
// First unit of work
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();

下面是使用的persistence.xml文件,

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="helloworld">
<properties>
<property name="hibernate.ejb.cfgfile"
value="/hibernate.cfg.xml"/>
</properties>
</persistence-unit>
</persistence>

所以这里再次持久化单元声明休眠配置文件。那么对象 Persistence.createEntityManagerFactory("helloworld"); 居然是在这里重播?

EntityManager em = emf.createEntityManager();

createEntityManager() 方法持有哪个对象?

4

1 回答 1

2

JPA(Java Persistence Api)是一种规范(我认为JRE只有接口),可以由许多提供者实现。

因此,Hibernate(例如)使用 hibernate 核心使实现 JPA 规范的类可用。

使用 JPA 而不是 Hibernate 的原因是 Hibernate 是完全专有的;他们可以随意更改他们的 API,如果您使用 Hibernate API,您将被迫使用 Hibernate 作为您的 ORM。JPA 是标准的,任何 ORM 提供者都可以选择满足 JPA 规范并通过它提供服务(fe EclipseLink)。

通过使用 JPA,您可以轻松地切换您的 ORM,以防您找到比您当前使用的更适合您的(性能、已修复的错误等)。如果你直接使用 Hibernate,你就不能那么容易地做到这一点。

于 2012-12-31T11:39:49.083 回答