2017-07-31 62 views
-3

在這個程序中,我想通過mobileNumber獲取詳細信息。當我們來到這裏Customer customer = (Customer)cr.uniqueResult();(行號28),則直接進入catch塊,並拋出這個異常:如何通過手機號碼使用休眠條件搜索

異常線程「main」 org.hibernate.TransactionException: 交易在 組織沒有成功啓動。 hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:100) 在com.TestByGSTNumber.main(TestByGSTNumber.java:36)

public class TestByNumber { 

    public static void main(String[] args) { 

     Configuration cfg=new Configuration(); 
     cfg.configure("com/util/hibernate.cfg.xml"); 
     SessionFactory factory=null; 
     Session session=null; 
     Transaction transaction=null; 
     try{ 
      session = SessionFinder.getSession(); 
      transaction = session.beginTransaction(); 
      Criteria cr = session.createCriteria(Customer.class); 
      cr.add(Restrictions.eq("mobileNumber","12345")); 
      Customer customer= (Customer)cr.uniqueResult(); 
      System.out.println("value"+customer.getCity()); 


     }catch(Exception e){ 
      if(transaction != null)transaction.rollback(); 
     } 
     finally{ 
      if(transaction!=null)transaction.commit();; 
      session.flush(); 
     } 

    } 

} 
+0

Java不是Javascript。你應該知道這一點,並正確設置標籤。 –

回答

0

好,根據你沒有提供的信息,例外情況是被拋出一行。否則,由於異常捕捉子句,它不會顯示。

我發現,由於其他原因,uniqueResult()調用引發異常(現在將e.printStackTrace()作爲異常塊中的第一行,只是消除它會阻止您知道發生了什麼)。

捕獲異常並回滾事務後,執行繼續執行finally塊,嘗試提交剛纔回滾的完全相同的事務。

如果您測試交易,而不僅僅是檢查null會更好。因此,請測試if (transaction != null && transaction.isActive()) {...}以檢查您的交易參考是否有效。檢查Hibernate reference

我建議你把sessiontransaction收購以外的try塊。這樣,受異常處理塊保護的語句將僅與業務邏輯操作相關,而不與準備執行所需的代碼有關。