jakarta.persistence.Query: setParameter не работает
- Что делаю:
с помощью
jakarta.persistence.Query
пытаюсь выполнить параметризованный SQL запрос:set search_path to :main_schema
. - Как делаю:
@PersistenceContext
private EntityManager entityManager;
@Transactional
public int executeOnePrepareFunctions(String schema) {
Query query = entityManager.createNativeQuery("set search_path to :main_schema", Long.class);
System.out.println(query == null); // false
System.out.println(query.getParameters().size()); // 1
query.setParameter("main_schema", "gh_persons");
System.out.println(query.getParameterValue("main_schema").toString()); // gh_persons
System.out.println(query.getParameterValue("main_schema").getClass()); //java.lang.String
return query.executeUpdate();
}
- Что получаю:
DEBUG [] [o.h.SQL] main set search_path to ?
Hibernate: set search_path to ?
WARN [] [o.h.e.j.s.SqlExceptionHelper] main SQL Error: 0, SQLState: 42601
ERROR [] [o.h.e.j.s.SqlExceptionHelper] main ERROR: syntax error at or near "$1" Position: 21
Step failed
org.hibernate.exception.SQLGrammarException: JDBC exception executing SQL [set search_path to ?] [ERROR: syntax error at or near "$1"
Position: 21] [n/a]
- Что думаю: думаю, что парметр, хоть я могу вывести, но он не видится каким-то методом (executeUpdate) или вообще как-то не проливается по-нормальному, раз система как раз на отсутствие параметра и ругается.
- Как проверял работоспособность: вместо парметризованного запроса, отправлял сразу готовый, без параметров:
set search_path to 'gh_persons'
. Успешно.
Вопрос: в чём может быть причина?
Ответы (1 шт):
Автор решения: Katia
→ Ссылка
Можно попробовать напрямую подставить схему
String q = "set search_path to " + schema;
Query query = entityManager.createNativeQuery(q);