Springboot에서 org.springframework.boot:spring-boot-starter-data-jdbc를 사용시 Dialect를 못찾는 현상이 발생.
->
1. application.yml에 아래값 추가
spring:
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.Oracle12cDialect
resources/META-INF/spring.factories 추가
org.springframework.data.jdbc.repository.config.DialectResolver$JdbcDialectProvider=com.config.oracle.MyOracleDialect
Dialect Custom 코드 작성
import org.springframework.data.jdbc.repository.config.DialectResolver;
import org.springframework.data.relational.core.dialect.AnsiDialect;
import org.springframework.data.relational.core.dialect.Dialect;
import org.springframework.jdbc.core.ConnectionCallback;
import org.springframework.jdbc.core.JdbcOperations;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.util.Locale;
import java.util.Optional;
@Configuration
public class MyOracleDialect implements DialectResolver.JdbcDialectProvider{
@Override
public Optional<Dialect> getDialect(JdbcOperations operations){
return Optional.ofNullable(
operations.execute((ConnectionCallback<Dialect>) MyOracleDialect::getDialect));
}
private static Dialect getDialect(Connection connection) throws SQLException{
DatabaseMetaData = connection.getMetaData();
String name = metaData.getDatabaseProductName().toLowerCase(Locale.ROOT);
if(name.contains("oracle"){
return AnsiDialect.INSTANCE;
}
return null;
}
}