Spring data jpa репозиторий, замените схему в Native Query - PullRequest
0 голосов
/ 31 марта 2019

Мне нужно сделать рефакторинг устаревшего кода.Он использует множественную архитектуру схемы 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, чтобы заменить все имена схем ...

Я был бы благодарен за любые обходные пути.

...