統合 Hibernate-JTA-JPA-EJB-GlassFish-MySQL: 1- Hibernate-JPA-EJB-GlassFish-MySql: このガイダンスは、hibernate.4.3.5 と EJB および GlassFish.4.0 を NetBeans.8.0 IDE に統合するためのものです。ネット Bean で Web プロジェクトを作成し、プロジェクトに hibernate jar ファイルを追加します。MySql と glassfish の構成に関連するその他の設定は非常に簡単なので、この記事では説明しません。次に、次のように persistence.xml ファイルを作成します。
<persistence-unit name="omidashouriPU" transaction-type="Resource_Local">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.archive.autodetection" value="class"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/YourSchemaName"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value="yourpassword"/>
<property name="hibernate.show_sql" value="true"/>
</properties>
</persistence-unit>
EntityManager を作成するための EJB クラス (@Stateless でアノテーションを付けたクラス) では、次の構文を使用します。
EntityManagerFactory emf = Persistence.createEntityManagerFactory("omidashouriPU"); EntityManager em = emf.createEntityManager(); em = emf.createEntityManager(); em.getTransaction().begin(); em.persist(YourEntityObject); em.getTransaction().end();
「transaction-type="Resource_Local" を使用している場合はご存知のように、トランザクションを自分で管理する必要があります。つまり、トランザクションの開始と終了の管理は私たちの責任です。
2- Hibernate-JPA-JTA-EJB-GlassFish-MySql: このガイダンスは、hibernate.4.3.5 と EJB および JTA と GlassFish.4.0 を NetBeans.8.0 IDE に統合するためのものです。ネット Bean で Web プロジェクトを作成し (注意: Netbeans.8.0 IDE にはバグがあるため、maven で Web プロジェクトを作成しないでください)、プロジェクトに hibernate jar ファイルを追加します。MySql と glassfish の構成に関連する他の設定は非常に簡単です (ちょうどResources>JDBC:JDBC Connection Pools & JDBC Resources で Connection Pool と JDBC を定義します。そのためのガイダンスは、検索すると Web にあります)(注意: 正しい JNDI を定義するには、最初に JPA のような JNDI に依存する一時プロジェクトを作成します。グラスフィッシュのプロジェクト、
<persistence-unit name="omidashouriPU" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>jdbc/yourJNDI (which you defined in glassfish) </jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.archive.autodetection" value="class"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.SunOneJtaPlatform"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/YourSchemaName"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value="yourpassword"/>
<property name="hibernate.show_sql" value="true"/>
</properties>
</persistence-unit>
EntityManager を作成するための EJB クラス (@Stateless でアノテーションを付けたクラス) では、次の構文を使用します。
@PersistenceContext(unitName = " omidashouriPU ")
EntityManager em;
em.persist(YourEntityObject);
「transaction-type="JTA" を使用している場合、トランザクションの管理はユーザーにはありません。つまり、トランザクションの開始と終了の管理は、アプリケーション サーバー (ここでは GlassFish) の責任です。実際、モードの設計で persistence.xml を確認すると、永続化プロバイダーのドロップダウン ボックスの前に hibernate が追加されていることがわかります。
読者の皆様、私はこの問題を解決するために 3 日間費やしました。この記事を完成させるために、あなたの経験をこの記事に追加してください。