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“
答案 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的更多信息。