jdbcTemplate не может разрешить {h-schema} во время выполнения - PullRequest
1 голос
/ 25 сентября 2019

Я пытаюсь получить имя схемы БД во время выполнения, используя свойство spring.jpa.properties.hibernate.default_schema в Spring, но оно не разрешает {h-schema} во время выполнения.

DemoApplication.java

public class DemoApplication 
{
    public static void main(String[] args) 
    {
        ApplicationContext context = SpringApplication.run(DemoApplication.class, args);
        Test test = context.getBean(Test.class);
        System.err.println("The required count is = "+test.getCount());
    }
}

Test.java

@FunctionalInterface
public interface Test 
{
    public BigDecimal getCount();
}

TestImpl.java

@Service
public class TestImpl implements Test
{

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Override
    public BigDecimal getCount() 
    {        
        return (BigDecimal) jdbcTemplate.queryForList("select count(*) from {h-schema}test").get(0).values().toArray()[0];
    }

}

application.properties

spring.datasource.url=jdbc:oracle:thin:@XXX:YYY/ZZZ
spring.jpa.database-platform=org.hibernate.dialect.Oracle12cDialect
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.username=X1
spring.datasource.password=Y1
spring.jpa.properties.hibernate.default_schema=Z1

#hibernate config
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
spring.jpa.hibernate.ddl-auto=none

logging.level.org.springframework.jdbc.core = TRACE

ErrorLog

Executing SQL query [select count(*) from {h-schema}test]

Exception in thread "main" org.springframework.jdbc.UncategorizedSQLException: StatementCallback; uncategorized SQLException for SQL [select count(*) from {h-schema}test]; SQL state [99999]; error code [17034]; Non supported SQL92 token at position: 22; nested exception is java.sql.SQLException: Non supported SQL92 token at position: 22

Я не уверен, как преобразовать переменную spring.jpa.properties.hibernate.default_schema из файла свойств в {h-schema}.Пожалуйста, предоставьте мне любой подходящий подход или альтернативу этой проблеме.

[Редактировать]: После многих отладок я обнаружил, что spring предоставляет два свойства, а именно spring.datasource.hikari.schema и spring.datasource.hikari.connection-init-sql , который может удовлетворить некоторые потребности, но также может изменить сеанс, что означает, что я не могу запрашивать данные из схемы, в которую я вошел, поэтому я все еще хотел быкто-то, чтобы предложить что-то, связанное с концепцией разрешения {h-schema} из файла свойств, чтобы я мог переключать схемы по необходимости на основе собственных запросов без жесткого кодирования имен схем или явного изменения сеансов схемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...