实体不能转换为java.lang.Double

时间:2010-02-04 01:08:15

标签: java netbeans jpa

  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

              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“

2 个答案:

答案 0 :(得分:1)

看起来像这一行

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

正在尝试将Transaction1强制转换为Double,这是不合法的。 Transaction1不是Double。

Transaction1是您从查询中获取的类型。据推测,Transaction1具有您正在寻找的作为其字段之一的值。查看您的查询,它至少包含来自AcoNo,toAccNo,name和amount的字段。它可能有一个名为currbal的字段或类似于您正在寻找的值。无论你试图摆脱查询是什么,你将不得不从查询中得到的对象中获取它。结果本身不是您正在寻找的值,而是包含该值。结果将表示表中的一行,而不仅仅是该行中的一列。

答案 1 :(得分:1)

施法错误位于

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

你甚至都不知道为什么要施展它?

作为帮助您通过此快速解决方案的快速解决方法,如何解决这个问题非常简单。只需将其更改为:

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

您的JPA查询返回的是实体对象,而不是单个原始值,因此您无法将其转换为double,因为您的查询未选择double - 它选择了Transaction1对象,因此您需要将查询中的单个结果转换为您选择的任何内容。

了解有关JPA的更多信息。