Есть ошибка org.hibernate.Исключение HibernateException: Ошибки в именованных запросах: customers.amountDeposit, customers.amountWithdraw

#java #hibernate #dao #named-query

Вопрос:

У меня проблема с именованным запросом, получена ошибка org.hibernate.HibernateException : Ошибки в именованных запросах: customers.amountDeposit , customers.amountWithdraw

Вот мои именные запросы на ввод и вывод суммы и реализация DAO с суммой и суммой с выводом, попробовал в первый раз, могу сказать, что я новичок в этом

     @NamedQueries   ({  
    @NamedQuery(name="customers.amountWithdraw", query="update customers set customerBalance = customerBalance - :amount where :customerAccNo"),
    @NamedQuery(name="customers.amountDeposit", query="update customers set customerBalance = customerBalance   :amount where :customerAccNo" )})  

    
    
 

И вот моя реализация DAO

     public Customer amountWithdraw(Customer customer,double amount) {
            customer=(Customer) session.get(Customer.class, customer.getCustomerAccNo());
            if(customer!=null) {
            Query query = session.getNamedQuery("customers.amountWithdraw");
            query.setParameter("customerBalance",customer.getCustomerBalance());        
            query.setParameter("amount", amount );
            query.setParameter("customerAccNo",customer.getCustomerAccNo());
            query.executeUpdate();
            customer=getCustomerByAccNo(customer.getCustomerAccNo());
            return customer;
            }
            return null;
        }
    
        public Customer amountDeposit(Customer customer, double amount) {   
            customer=(Customer) session.get(Customer.class, customer.getCustomerAccNo());
            if(customer!=null) {
            Query query = session.getNamedQuery("customers.amountDeposit"); 
            query.setParameter("customerBalance",customer.getCustomerBalance());
            query.setParameter("amount", amount );
            query.setParameter("customerAccNo",customer.getCustomerAccNo());
            query.executeUpdate();
            customer=getCustomerByAccNo(customer.getCustomerAccNo());       
            return customer;
            }
            return null;        
        }
 

Ответ №1:

Очевидно where :customerAccNo , что это недопустимый предикат. Вы должны сравнить этот параметр с некоторым столбцом/полем с = помощью оператора, например, оператора равенства, чтобы это стало правильным предикатом. Используйте это:

 @NamedQueries   ({  
    @NamedQuery(name="customers.amountWithdraw", query="update customers set customerBalance = customerBalance - :amount where customerAccNo = :customerAccNo"),
    @NamedQuery(name="customers.amountDeposit", query="update customers set customerBalance = customerBalance   :amount where customerAccNo = :customerAccNo" )})