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.context.ConfigurationException;
|
||||||
import ca.uhn.fhir.jpa.config.HibernatePropertiesProvider;
|
import ca.uhn.fhir.jpa.config.HibernatePropertiesProvider;
|
||||||
|
import ca.uhn.fhir.util.ReflectionUtil;
|
||||||
import org.hibernate.dialect.Dialect;
|
import org.hibernate.dialect.Dialect;
|
||||||
import org.hibernate.engine.jdbc.dialect.internal.StandardDialectResolver;
|
import org.hibernate.engine.jdbc.dialect.internal.StandardDialectResolver;
|
||||||
import org.hibernate.engine.jdbc.dialect.spi.DatabaseMetaDataDialectResolutionInfoAdapter;
|
import org.hibernate.engine.jdbc.dialect.spi.DatabaseMetaDataDialectResolutionInfoAdapter;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
|
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
|
||||||
|
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
|
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
||||||
|
|
||||||
public class JpaHibernatePropertiesProvider extends HibernatePropertiesProvider {
|
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) {
|
public JpaHibernatePropertiesProvider(LocalContainerEntityManagerFactoryBean theEntityManagerFactory) {
|
||||||
DataSource connection = myEntityManagerFactory.getDataSource();
|
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()) {
|
try (Connection dbConnection = connection.getConnection()) {
|
||||||
dialect = new StandardDialectResolver()
|
myDialect = new StandardDialectResolver()
|
||||||
.resolveDialect(new DatabaseMetaDataDialectResolutionInfoAdapter(dbConnection.getMetaData()));
|
.resolveDialect(new DatabaseMetaDataDialectResolutionInfoAdapter(dbConnection.getMetaData()));
|
||||||
} catch (SQLException sqlException) {
|
} catch (SQLException sqlException) {
|
||||||
throw new ConfigurationException(sqlException.getMessage(), sqlException);
|
throw new ConfigurationException(sqlException.getMessage(), sqlException);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Dialect getDialect() {
|
public Dialect getDialect() {
|
||||||
return dialect;
|
return myDialect;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user