Я создал пользовательскую функцию PostgreSQL:
create function delete_classes() returns void as
$$
DELETE FROM ...;
$$ language sql;
Я хотел бы вызвать эту функцию с помощью Spring's JDBCTemplate.Я попробовал следующее:
@Repository
class Repository {
private final JdbcTemplate template; // initialized in constructor
public void deleteClasses() {
template.update("select delete_classes()");
}
}
Я получаю следующую ошибку:
Caused by: org.springframework.dao.DataIntegrityViolationException:
PreparedStatementCallback; SQL [select delete_classes()];
A result was returned when none was expected.;
nested exception is org.postgresql.util.PSQLException:
A result was returned when none was expected.
Функция PostgreSQL delete_classes
возвращает void
, поэтому я не совсем уверен, что здесь имеется в виду,В операторе DELETE
нет предложения RETURNING ...
.
Как правильно выполнить функцию?
update
Я попробовалследующее (execute
вместо update
):
@Repository
class Repository {
private final JdbcTemplate template; // initialized in constructor
public void deleteClasses() {
template.execute("select delete_classes()", statement -> null);
}
}
Здесь это реализует PreparedStatementCallback
в лямбда-режиме, который просто возвращает ноль.
Функция delete_classes
не звонил сейчас.