首页 > 解决方案 > 得到错误 org.hibernate.HibernateException:命名查询中的错误:customers.amountDeposit,customers.amountWithdraw

问题描述

我在命名查询中遇到问题得到错误org.hibernate.HibernateException:命名查询中的错误:customers.amountDepositcustomers.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;        
        }

标签: javahibernatedaonamed-query

解决方案


显然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" )})  


推荐阅读