Сущности нельзя привести к java.lang. Double - PullRequest
1 голос
/ 04 февраля 2010
  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"));
              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 ]

1 голос
/ 04 февраля 2010

Ошибка приведения в

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

Вы даже не знаете, почему вы его разыгрываете?

Как быстрое решение, чтобы помочь вам пройти это, как исправить это очень просто. Просто измените его на:

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

Ваш запрос JPA возвращает объект-сущность, а не одно примитивное значение, поэтому вы не можете привести его к удвоению, потому что ваш запрос не выбрал удвоение - он выбрал объект Transaction1, поэтому вам нужно привести один результат запроса во все, что вы выбрали назад.

Подробнее о JPA.

1 голос
/ 04 февраля 2010

Похоже на эту строку

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

пытается преобразовать транзакцию1 в удвоение, что недопустимо. Транзакция1 не является двойной.

Transaction1 - это тип, который вы получаете по вашему запросу. Предположительно, что Transaction1 имеет значение, которое вы ищете в качестве одного из его полей. Глядя на ваш запрос, он имеет по крайней мере поля fromAccNo, toAccNo, name и amount. Возможно, в нем есть поле с именем currbal или что-то похожее со значением, которое вы ищете. Что бы вы ни пытались выбраться из запроса, вам нужно будет получить это из объекта, который вы получили из запроса. Сам результат - это не значение, которое вы ищете, а скорее содержит это значение. Результат будет представлять строку в таблице, а не только один столбец в этой строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...