Я пытаюсь получить имя схемы БД во время выполнения, используя свойство 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} из файла свойств, чтобы я мог переключать схемы по необходимости на основе собственных запросов без жесткого кодирования имен схем или явного изменения сеансов схемы.