2010-02-04 65 views
1
public static List<Transaction1> debitSourceAccBalance (Integer youraccinput, Integer toaccinput, String recname, Double amtsender) { 
    EntityManager em = emf.createEntityManager(); 
    em.getTransaction().begin(); 
    Query q = em.createQuery("SELECT t from Transaction1 t where t.fromAccNo =:youraccinput AND t.toAccNo =:toaccinput AND t.name =:recname AND t.amount >=:amtsender"); 
    q.setParameter("youraccinput", youraccinput); 
    q.setParameter("toaccinput", toaccinput); 
    q.setParameter("recname", recname); 
    q.setParameter("amtsender", amtsender); 
    Double currbal = (Double)q.getSingleResult(); 

    amtsender = currbal - amtsender; 
    Query u = em.createQuery("UPDATE Transaction1 t SET t.amount =:amtsender WHERE t.fromAccNo =:youraccinput AND t.toAccNo =:toaccinput"); 
    u.setParameter("youraccinput", youraccinput); 
    u.setParameter("toaccinput", toaccinput); 
    u.setParameter("amtsender", amtsender); 

    u.executeUpdate(); 
    return q.getResultList(); 

的Servlet:實體不能轉換爲java.lang.Double的

   Integer youraccinput = Integer.parseInt(request.getParameter("fromAccNo")); 
       Integer toaccinput = Integer.parseInt(request.getParameter("toAccNo")); 
       String recname = request.getParameter("name"); 
       Double amtsender = Double.parseDouble(request.getParameter("amount")); 


     List<Transaction1> results = Transaction1.debitSourceAccBalance(youraccinput, toaccinput, recname, amtsender); 
         results.listIterator(); 
         request.getRequestDispatcher("ListSingleTransaction").forward(request, response); 

爲什麼會收到此錯誤信息?請幫助修復!

「Entities.Transaction1不能轉換 到java.lang.Double中的」

+1

如果您收到了演員例外情況,首先看的地方就是您正在演員演員陣容的*。 – 2010-02-04 01:11:54

+0

即時對不起,我沒有得到它 – kobrakai 2010-02-04 01:14:26

+0

你寫這個代碼? – 2010-02-04 01:16:20

回答

1

演員錯誤是在

Double currbal = (Double)q.getSingleResult(); 

你甚至不知道你爲什麼鑄造了嗎?

作爲一個快速修復,以幫助您通過這一個,如何解決這是非常簡單的。只需將其更改爲:

Transaction1 transaction = (Transaction1) q.getSingleResult(); 
Double currbal = transaction.getCurrentBalance(); // method name assumed 

你的JPA查詢返回的實體對象,而不是一個單一的原始值,所以你不能投它加倍,因爲您的查詢沒有選擇雙 - 它選擇了Transaction1對象,因此您需要將查詢中的單個結果轉換爲您選擇的任何內容。

閱讀關於JPA的更多內容。

+0

這工作完美無瑕,非常感謝,我真的需要更多關於JPA,我認爲邏輯對我來說似乎很好,因爲我從我的講師那裏學到了,我只需要使用它並且不需要知道如何,我想我誤解。因此,它的代碼是我抄襲他的。 – kobrakai 2010-02-04 10:17:07

+0

你正在學習JPA嗎?很好的開始。乾杯。 – aberrant80 2010-02-04 11:54:25

1

它看起來像這條線

Double currbal = (Double)q.getSingleResult(); 

試圖蒙上爲Transaction1將翻一番,即ISN不合法。 Transaction1不是Double。

Transaction1是您從查詢中獲得的類型。據推測,該交易1具有您正在尋找的其中一個領域的價值。查看您的查詢,它至少包含來自AccNo,toAccNo,名稱和金額的字段。它可能有一個叫currbal的字段或類似的值,你正在尋找。無論你試圖擺脫查詢,你都必須從查詢中得到的對象中取出它。結果本身不是你正在尋找的價值,而是包含了這個價值。結果將代表表中的一行,而不僅僅是該行中的一列。

+0

我該如何解決? – kobrakai 2010-02-04 01:25:24

+0

是的,你是完全正確的,但我仍然不知道如何修復代碼。 – kobrakai 2010-02-04 01:53:36

+0

感謝您的理解,這有助於我現在理解。 再次感謝。 – kobrakai 2010-02-04 10:18:09

相關問題