无法将实体转换为java.lang.Double 公共静态列表debitSourceAccBalance(整数youraccinput、整数到AccInput、字符串recname、双amtsender){ EntityManager em=emf.createEntityManager(); em.getTransaction().begin(); 查询q=em.createQuery(“从事务1 t中选择t,其中t.fromAccNo=:youraccinput和t.toAccNo=:toaccinput和t.name=:recname和t.amount>=:amtsender”); q、 设置参数(“youraccinput”,youraccinput); q、 设置参数(“toaccinput”,toaccinput); q、 setParameter(“recname”,recname); q、 设置参数(“amtsender”,amtsender); Double currbal=(Double)q.getSingleResult(); amtsender=当前余额-amtsender; Query u=em.createQuery(“更新事务1 t SET t.amount=:amtsender,其中t.fromAccNo=:youraccinput和t.toAccNo=:toaccinput”); u、 设置参数(“youraccinput”,youraccinput); u、 设置参数(“toaccinput”,toaccinput); u、 设置参数(“amtsender”,amtsender); u、 executeUpdate(); 返回q.getResultList();

无法将实体转换为java.lang.Double 公共静态列表debitSourceAccBalance(整数youraccinput、整数到AccInput、字符串recname、双amtsender){ EntityManager em=emf.createEntityManager(); em.getTransaction().begin(); 查询q=em.createQuery(“从事务1 t中选择t,其中t.fromAccNo=:youraccinput和t.toAccNo=:toaccinput和t.name=:recname和t.amount>=:amtsender”); q、 设置参数(“youraccinput”,youraccinput); q、 设置参数(“toaccinput”,toaccinput); q、 setParameter(“recname”,recname); q、 设置参数(“amtsender”,amtsender); Double currbal=(Double)q.getSingleResult(); amtsender=当前余额-amtsender; Query u=em.createQuery(“更新事务1 t SET t.amount=:amtsender,其中t.fromAccNo=:youraccinput和t.toAccNo=:toaccinput”); u、 设置参数(“youraccinput”,youraccinput); u、 设置参数(“toaccinput”,toaccinput); u、 设置参数(“amtsender”,amtsender); u、 executeUpdate(); 返回q.getResultList();,java,netbeans,jpa,Java,Netbeans,Jpa,Servlet: public static List<Transaction1> debitSourceAccBalance (Integer youraccinput, Integer toaccinput, String recname, Double amtsender) { EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); Query q = em

Servlet:

  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();
Integer youraccinput=Integer.parseInt(request.getParameter(“fromAccNo”);
整数toacInput=Integer.parseInt(request.getParameter(“toAccNo”);
String recname=request.getParameter(“name”);
Double-amtsender=Double.parseDouble(request.getParameter(“amount”);
列表结果=交易1.借记资源账户余额(youraccinput、toaccinput、recname、amtsender);
results.listIterator();
request.getRequestDispatcher(“ListSingleTransaction”).forward(请求、响应);
为什么我会收到此错误消息?请帮助修复

“无法强制转换Entities.Transaction1 到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);
正在尝试将Transaction1强制转换为Double,这是不合法的。Transaction1不是Double

Transaction1是您从查询中获得的类型。该Transaction1可能具有您要查找的值作为其字段之一。查看您的查询,它至少具有Accno、toAccNo、name和amount字段。它可能具有名为currbal的字段或与您要查找的值类似的字段。什么呃,如果您试图从查询中取出,则必须从查询中得到的对象中取出。结果本身不是您要查找的值,而是包含该值。结果将表示表中的一行,而不仅仅是该行中的一列。

强制转换错误在

Double currbal = (Double)q.getSingleResult();
你甚至不知道为什么要选它

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

Double currbal = (Double)q.getSingleResult();
您的JPA查询返回的是实体对象,而不是单个原语值,因此您无法将其强制转换为double,因为您的查询没有选择double-它选择了
Transaction1
对象,因此您需要将查询中的单个结果强制转换为您选择的对象


阅读有关JPA的更多信息。

如果您遇到强制转换异常,首先要看的是您正在执行强制转换的那一行。您编写了这段代码吗?是的,我没有执行任何“强制转换”。这是实体提到的两倍。我认为它应该在哪里工作
double currbal=(double)q.getSingleResult()
是一个强制转换。请参阅“类型铸造"。是的,你完全正确,但我仍然不知道如何修复代码。谢谢你的理解,这有助于我现在理解。再次感谢。这工作完美无瑕,非常感谢,我确实需要更多关于JPA的内容,我认为逻辑对我来说似乎很好,因为我从讲师那里学到,我只需要使用它,不需要知道如何使用,我我想我误解了。因此,这是我从他那里抄来的代码。你是学生,在学习JPA?很好,能领先一步。干杯。
Transaction1 transaction = (Transaction1) q.getSingleResult();
Double currbal = transaction.getCurrentBalance();  // method name assumed