无法将实体转换为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();
Servlet:无法将实体转换为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
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