-2

javax.persistence.* を使用してネイティブ Java サポートで ORM を実現できる場合、休止状態などのプロバイダーを使用する利点は何ですか?

本のJavaの永続性と休止状態は、次のように述べています。

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 仕様を実装するクラスを利用可能にします。

Hibernate ではなく JPA を使用する理由は、Hibernate が完全に独自仕様であるためです。必要に応じて API を変更できます。Hibernate API を使用する場合は、Hibernate を ORM として使用する必要があります。JPA は標準です。どの ORM プロバイダーも、JPA 仕様に適合し、それを通じてサービスを提供することを選択できます (fe EclipseLink)。

JPA を使用すると、現在使用している ORM よりも適したもの (パフォーマンス、バグ修正など) が見つかった場合に、ORM を簡単に切り替えることができます。Hibernate を直接使用している場合、これを簡単に行うことはできません。

于 2012-12-31T11:39:49.083 に答える