У меня есть странная проблема, что я могу успешно вызвать хранимую процедуру MySQL
. Но вызов его с помощью Java
возвращает ошибку.
Ниже приведен мой метод контроллера:
public double getBalance(String number) {
double balance ;
try {
Query query = getSession().createSQLQuery("CALL getBalance(:string_number)").addEntity(Wallet.class)
.setParameter("string_number", number);
List result = query.list();
if (result.size() == 0) {
balance = -1.0;
} else {
balance = (double) result.get(0);
}
} catch (Exception ex) {
throw ex;
}
return balance;
}
Это моя хранимая процедура:
CREATE DEFINER='root'@'localhost' PROCEDURE 'getBalance'(IN string_number varchar(19))
BEGIN
select amount from wallet where number=string_number;
END
Ошибка:
SEVERE: Servlet.service() for servlet [dispatcher] in context with path
[/DigitalWallet] threw exception [Request processing failed; nested
exception is javax.persistence.PersistenceException:
org.hibernate.exception.SQLGrammarException: could not execute query] with
root cause
java.sql.SQLException: Column 'number' not found.
У меня есть столбец чисел, и я могу успешно вызвать хранимую процедуру в MySQL Workbench.
Вместо этого вы должны использовать doWork()
, вы можете в основном создать соединение с выражениями лямбда. Вы можете увидеть несколько примеров ЗДЕСЬ