Improve dialect handling
This commit is contained in:
@@ -2,31 +2,44 @@ package ca.uhn.fhir.jpa.starter.util;
|
||||
|
||||
import ca.uhn.fhir.context.ConfigurationException;
|
||||
import ca.uhn.fhir.jpa.config.HibernatePropertiesProvider;
|
||||
import ca.uhn.fhir.util.ReflectionUtil;
|
||||
import org.hibernate.dialect.Dialect;
|
||||
import org.hibernate.engine.jdbc.dialect.internal.StandardDialectResolver;
|
||||
import org.hibernate.engine.jdbc.dialect.spi.DatabaseMetaDataDialectResolutionInfoAdapter;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
||||
|
||||
public class JpaHibernatePropertiesProvider extends HibernatePropertiesProvider {
|
||||
private static final Logger ourLog = LoggerFactory.getLogger(JpaHibernatePropertiesProvider.class);
|
||||
|
||||
private final Dialect dialect;
|
||||
private final Dialect myDialect;
|
||||
|
||||
public JpaHibernatePropertiesProvider(LocalContainerEntityManagerFactoryBean myEntityManagerFactory) {
|
||||
DataSource connection = myEntityManagerFactory.getDataSource();
|
||||
try (Connection dbConnection = connection.getConnection()) {
|
||||
dialect = new StandardDialectResolver()
|
||||
public JpaHibernatePropertiesProvider(LocalContainerEntityManagerFactoryBean theEntityManagerFactory) {
|
||||
String dialectClass =
|
||||
(String) theEntityManagerFactory.getJpaPropertyMap().get("hibernate.dialect");
|
||||
if (isNotBlank(dialectClass)) {
|
||||
myDialect = ReflectionUtil.newInstanceOrReturnNull(dialectClass, Dialect.class);
|
||||
} else {
|
||||
ourLog.warn("'hibernate.dialect' not set in application configuration! Please explicitly specify a valid HAPI FHIR hibernate dialect.");
|
||||
DataSource connection = theEntityManagerFactory.getDataSource();
|
||||
try (Connection dbConnection = connection.getConnection()) {
|
||||
myDialect = new StandardDialectResolver()
|
||||
.resolveDialect(new DatabaseMetaDataDialectResolutionInfoAdapter(dbConnection.getMetaData()));
|
||||
} catch (SQLException sqlException) {
|
||||
throw new ConfigurationException(sqlException.getMessage(), sqlException);
|
||||
} catch (SQLException sqlException) {
|
||||
throw new ConfigurationException(sqlException.getMessage(), sqlException);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dialect getDialect() {
|
||||
return dialect;
|
||||
return myDialect;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user