Мы столкнулись с этой проблемой на работе. Я исправил это, как предлагает Роберт, создав провайдера соединений (т. Е. Реализацию DataSource), названного «OracleSchemaRemappingDataSource» и использовав пружину для подключения.
По сути, этот источник данных реализует getConnection (). Реализация этого метода работает путем получения соединения от какого-то другого источника данных путем инжекции пружины, который он предполагает как соединение оракула, а затем выполняет
ALTER SESSION SET CURRENT_SCHEMA = 'someotherschema'
и они передают это соединение обратно.
Все конфигурации hibernate осторожно используют имена без указания схем для них.
Кроме того: с этим вы не хотите отключать кэширование - разрешите hibernate управлять соединениями в обычном режиме, поскольку мы не делаем никакой магии в приложении, такой как использование разных соединений для каждого пользователя.