2011-07-25 8 views
0

このコードを見てください。 Persistは、Candidateと呼ばれるテーブルで動作し、VerifyLinkという別のテーブルでは動作しません。一方、hibernateは、ログファイルに永続化されていることを示します。 以下のログを見てください。最初に「insert into candidate」というクエリが表示されますが、2番目のケースではクエリが表示されません。なにが問題ですか ?hibernate commit:ログでコミットされたことを示しますが、実際にはそれはありません

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:+ 0530 40.020 | INFO | glassfish3.0.1 | javax.enterprise.system.std.com。 ##| 2011-07-25T12:38:40.021+ |##| 2011-07-25T12: 0530 | INFO | glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 61; _ThreadName = Thread-1; | status:0 |#]

[ #| 2011-07-25 T12:38:40.093 + 0530 | INFO | glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 61; _ThreadName =スレッド-1; |休止状態:候補者に挿入(コメント、CREATION_DATE、currentCompany、current_ctc、CV、cv_name、DOB、EMAIL_ID、email_id_verified、expected_ctc、FIRST_NAME、LAST_NAME、場所、モバイル、notice_period、パスワード、性別、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 |情報| 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; | [email protected] |#]

[#| 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; | status: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 ; | committed:|#]

[#| 2011-07-25T12:38:47.159 + 0530 | INFO | glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 61; _ThreadName =スレッド-1; |近い取引:|#]

答えて

0

下図のように私はuserTransaction.begin(後em.joinTransactionを())を添加し、この問題を解決しているようです。それは今働く。私は

if (Status.STATUS_ACTIVE != status){ 
       count.incrementAndGet(); 
       userTransaction.begin(); 
       em.joinTransaction(); 
      } 
からヒントを得ました
関連する問題