Мне нужно сделать рефакторинг устаревшего кода.Он использует множественную архитектуру схемы ORACLE.В настоящее время каждый пакет в коде выполняет свои SQL-запросы как собственный запрос с определенным именем схемы.Это выглядит так:
@Repository
public interface CustomerRepository extends CrudRepository<Customer, Long> {
@Query(value = "select * from AAA.Customer c where c.lastName = ?1", nativeQuery = true)
List<Customer> findByLastName(String lastName);
и
@Repository
public interface ProductRepository extends CrudRepository<Product, Long> {
@Query(value = "select * from BBB.Product p where p.id = ?1", nativeQuery = true)
Product findById(Long id);
Это работало нормально, пока компания не использовала только одну производственную среду.Теперь они хотят создать среду test на том же сервере (чтобы они не могли сохранять одинаковые имена схем).
Мой вопрос: есть ли способ заменить имя схемы во время выполнения (например, применить какой-нибудь префикс)?
Я попытался использовать «hibernate.physical_naming_strategy» и переопределить toPhysicalCatalogName"и" toPhysicalSchemaName ".К сожалению, он не применяется к NativeQuery (но отлично работает с именованными запросами JPQL).
Другой способ, который я пробовал, - использовать заполнитель {h-schema} и свойство "hibernate.default_schema".Он работает с NativeQueries, но я знаю только два заполнителя (h-схема и h-каталог).И мне нужно больше 10, чтобы заменить все имена схем ...
Я был бы благодарен за любые обходные пути.