Skip to content

Commit 9ecffed

Browse files
James AgnewJames Agnew
James Agnew
authored and
James Agnew
committed
Improve dialect handling
1 parent 0b907a4 commit 9ecffed

File tree

1 file changed

+21
-8
lines changed

1 file changed

+21
-8
lines changed

src/main/java/ca/uhn/fhir/jpa/starter/util/JpaHibernatePropertiesProvider.java

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,44 @@
22

33
import ca.uhn.fhir.context.ConfigurationException;
44
import ca.uhn.fhir.jpa.config.HibernatePropertiesProvider;
5+
import ca.uhn.fhir.util.ReflectionUtil;
56
import org.hibernate.dialect.Dialect;
67
import org.hibernate.engine.jdbc.dialect.internal.StandardDialectResolver;
78
import org.hibernate.engine.jdbc.dialect.spi.DatabaseMetaDataDialectResolutionInfoAdapter;
9+
import org.slf4j.Logger;
10+
import org.slf4j.LoggerFactory;
811
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
912

1013
import java.sql.Connection;
1114
import java.sql.SQLException;
1215
import javax.sql.DataSource;
1316

17+
import static org.apache.commons.lang3.StringUtils.isNotBlank;
18+
1419
public class JpaHibernatePropertiesProvider extends HibernatePropertiesProvider {
20+
private static final Logger ourLog = LoggerFactory.getLogger(JpaHibernatePropertiesProvider.class);
1521

16-
private final Dialect dialect;
22+
private final Dialect myDialect;
1723

18-
public JpaHibernatePropertiesProvider(LocalContainerEntityManagerFactoryBean myEntityManagerFactory) {
19-
DataSource connection = myEntityManagerFactory.getDataSource();
20-
try (Connection dbConnection = connection.getConnection()) {
21-
dialect = new StandardDialectResolver()
24+
public JpaHibernatePropertiesProvider(LocalContainerEntityManagerFactoryBean theEntityManagerFactory) {
25+
String dialectClass =
26+
(String) theEntityManagerFactory.getJpaPropertyMap().get("hibernate.dialect");
27+
if (isNotBlank(dialectClass)) {
28+
myDialect = ReflectionUtil.newInstanceOrReturnNull(dialectClass, Dialect.class);
29+
} else {
30+
ourLog.warn("'hibernate.dialect' not set in application configuration! Please explicitly specify a valid HAPI FHIR hibernate dialect.");
31+
DataSource connection = theEntityManagerFactory.getDataSource();
32+
try (Connection dbConnection = connection.getConnection()) {
33+
myDialect = new StandardDialectResolver()
2234
.resolveDialect(new DatabaseMetaDataDialectResolutionInfoAdapter(dbConnection.getMetaData()));
23-
} catch (SQLException sqlException) {
24-
throw new ConfigurationException(sqlException.getMessage(), sqlException);
35+
} catch (SQLException sqlException) {
36+
throw new ConfigurationException(sqlException.getMessage(), sqlException);
37+
}
2538
}
2639
}
2740

2841
@Override
2942
public Dialect getDialect() {
30-
return dialect;
43+
return myDialect;
3144
}
3245
}

0 commit comments

Comments
 (0)