Имена таблиц не могут быть параметризованы, поэтому вы получаете ошибку.
Переменные связывания существуют в основном по соображениям производительности, параметризованный запрос будет скомпилирован БД только один раз, а для последующих последующих исполнений используется та же скомпилированная версия.
Значением для заполнителя будет строка,
Таким образом, SELECT (TRIM(TYPE_NAME) ||'.'|| TRIM(NAME)) AS NAMES FROM ?1
с xyz
в качестве имени таблицы фактически переводит в
SELECT (TRIM(TYPE_NAME) ||'.'|| TRIM(NAME)) AS NAMES FROM 'xyz'
, что является недопустимым SQL
Как вы упомянули, у вас есть entityManager's
Например, вы можете выполнить запрос, как показано ниже:
entityManager.query(String.format("SELECT (TRIM(TYPE_NAME) ||'.'|| TRIM(NAME)) AS NAMES FROM %s", viewName));