#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" )})