2

休止状態の場合:

@PersistenceUnit(unitName = "oracle")
private EntityManagerFactory emf;
@Resource
private UserTransaction u;

protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
         EntityManager em = emf.createEntityManager();
try {
         u.begin();
         em.persist(some entity);
         u.commit();
     } catch (Exception e) {
         e.printStackTrace();
     }

これはデータベースに何も書き込みません。EclipseLink に切り替えると、問題なく動作します。
私が使用する場合

EntityTransaction et = em.getTransaction();

休止状態の代わりにUserTransactionDB に書き込みます。(つまり、EclipseLink のように、hibernate は JTA を認識しません)。



休止状態の何が問題になっていますか? (4.0.0-最終) ありがとう

編集:

最後の 2 つのプロパティを追加しました: (私はグラスフィッシュを使用しています)

<properties>
    <property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect"/>
    <property name="hibernate.show_sql" value="true"/>
    <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
    <property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.JTATransactionFactory" />
    <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.SunONETransactionManagerLookup" />
</properties>

しかし、まだ機能しません

4

3 に答える 3

3

最後の 2 つのプロパティは不要なので削除しました。
私の問題は、 の外部で EM をu.begin()作成していたことであり、トランザクションまたは呼び出しの内部で作成する必要がありますem.joinTransaction()

ありがとう:

私はここから答えを得ました: Hibernate JPA with JTA and Glassfish Application Server does not think to commit

于 2012-05-21T07:24:05.960 に答える
0

Hibernate が JTA トランザクション マネージャーを認識して、それ自体をトランザクション リソースとして登録するようにしてください。

*hibernate.transaction.factory_class* プロパティをorg.hibernate.transaction.JTATransactionFactoryに設定し、*hibernate.transaction.manager_lookup_class* プロパティをサーバーのトランザクション マネージャー ルックアップ クラス (例: org.hibernate.transaction.JBossTransactionManagerLookup ) に設定するか、独自のorg.hibernate.transaction.JNDITransactionManagerLookupから継承して所有します。

サンプルhibernate.properties :

hibernate.transaction.factory_class = org.hibernate.transaction.JTATransactionFactory
hibernate.transaction.manager_lookup_class = org.hibernate.transaction.JBossTransactionManagerLookup

Hibernate リファレンス ドキュメントのセクション 3.3を参照してください。詳細については、 JDBC 接続を参照してください。

于 2012-05-20T21:45:45.820 に答える
0

私にとっては、次の行を削除した後にのみ正しく機能し始めました。

<property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.JTATransactionFactory" />
于 2012-10-03T07:25:36.740 に答える