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);
→ Ссылка