0

このコードを見てください。Persist は Candidate というテーブルに対して機能し、VerifyLink という別のテーブルに対しては機能しませんが、hibernate はログ ファイルに永続化されていることを示しています。以下のログを見てください。最初のケースでは「候補に挿入」というクエリが表示されますが、2 番目のケースではクエリが表示されません。なにが問題ですか ?

protected final void doInTransaction(PersistenceActionWithoutResult action) throws EntityAccessorException {
    EntityManager em = emf.createEntityManager();
    try {
        int status = 0;
        status = userTransaction.getStatus();
        if (Status.STATUS_ACTIVE != status){
            count.incrementAndGet();
            userTransaction.begin();
        }
        action.execute(em);
        System.out.println(em);
        status = userTransaction.getStatus();
        System.out.println("status : " + status);
        if (Status.STATUS_ACTIVE == status) {
            if (0 == count.decrementAndGet()) {
                userTransaction.commit();
                System.out.println("committed : ");
            }
        }
    } catch (Exception e) {
        try {
            userTransaction.rollback();
            System.out.println("rolled back :");
            e.printStackTrace();
        } catch (Exception ex) {
            Logger.getLogger(AbstractEntityAccessor.class.getName()).log(Level.SEVERE, null, ex);
        }
        throw new EntityAccessorException(e);
    } finally {
        System.out.println("transaction close :");
        em.close();
    }
}

初めて何かをコミットするとき

[#|2011-07-25T12:38:40.020+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|org.hibernate.ejb.EntityManagerImpl@15e3c52|#]

[#|2011-07-25T12:38:40.021+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|ステータス: 0|#]

[#|2011-07-25T12:38:40.093+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|Hibernate: Candidate (comment、creation_date、currentCompany、current_ctc、cv、cv_name、dob、email_id、email_id_verified、expected_ctc、first_name、last_name、location、mobile、notice_period、password、sex、upadte_date、years_of_exp、cand_id) 値 ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)|#]

[#|2011-07-25T12:38:40.164+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|コミット: |#]

[#|2011-07-25T12:38:40.165+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|取引終了:|#]

[#|2011-07-25T12:38:47.158+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|org.hibernate.ejb.EntityManagerImpl@1fd91c4|#]

[#|2011-07-25T12:38:47.159+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|ステータス: 0|#]

[#|2011-07-25T12:38:47.159+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|コミット: |#]

[#|2011-07-25T12:38:47.159+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|取引終了:|#]

4

1 に答える 1

0

以下に示すように、 userTransaction.begin() の後に em.joinTransaction() を追加しましたが、これで問題が解決したようです。それは今動作します。からヒントをもらいました。

if (Status.STATUS_ACTIVE != status){
                count.incrementAndGet();
                userTransaction.begin();
                em.joinTransaction();
            }
于 2011-07-25T17:49:26.403 に答える