Выполнение собственного запроса Oracle с управляемым контейнером источником данных
У меня есть проект с использованием JPA <non-jta-datasource>
в persistence.xml
для подключения к управляемому контейнером источнику данных Oracle, и мне нужно в какой-то момент использовать собственный запрос, который создается динамически. По умолчанию в Oracle мне нужно указать schema
в имени таблицы, чтобы сделать запрос, но у меня нет доступа к имени схемы (и не должен).
Прежде всего, это ожидаемое поведение? Если я выполню SELECT * FROM TABLE
должен Hibernate переименовать его в параметры источника данных и выполнить SELECT * FROM SCHEMA.TABLE
вместо?
Если это не так, есть ли способ получить имя схемы динамически? Даже если источником данных управляет WebLogic/JBoss?
1 ответ
Вы можете выполнить заявление alter session set current_schema=SCHEMA;
переключать видимость объекта. но это оператор DDL, который не поддерживает заполнители переменных связывания. Боюсь, что ни один JPA не поддерживает выполнение оператора обратного вызова, когда соединение выводится из пула соединений.
Обычно, когда вы хотите получить доступ к объекту из другой схемы и не хотите использовать префикс схемы, тогда вы создаете синонимы в своей схеме. Это обычный способ, как решить такую "проблему"