Support automatic Hibernate dialect detection

Use the preferred SessionFactoryImplementor#getDialect call as
opposed to the previous Dialect#getDialect approach which required
explicitly setting the 'hibernate.dialect' property.

Issue: SPR-7396
This commit is contained in:
Chris Beams
2012-03-09 11:20:52 +02:00
parent 352ed517c5
commit 045c97f75e

View File

@@ -39,6 +39,7 @@ import org.hibernate.cfg.Environment;
import org.hibernate.cfg.NamingStrategy; import org.hibernate.cfg.NamingStrategy;
import org.hibernate.dialect.Dialect; import org.hibernate.dialect.Dialect;
import org.hibernate.engine.FilterDefinition; import org.hibernate.engine.FilterDefinition;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.event.EventListeners; import org.hibernate.event.EventListeners;
import org.hibernate.tool.hbm2ddl.DatabaseMetadata; import org.hibernate.tool.hbm2ddl.DatabaseMetadata;
import org.hibernate.transaction.JTATransactionFactory; import org.hibernate.transaction.JTATransactionFactory;
@@ -930,13 +931,14 @@ public class LocalSessionFactoryBean extends AbstractSessionFactoryBean implemen
configTimeDataSourceHolder.set(dataSource); configTimeDataSourceHolder.set(dataSource);
} }
try { try {
HibernateTemplate hibernateTemplate = new HibernateTemplate(getSessionFactory()); SessionFactory sessionFactory = getSessionFactory();
final Dialect dialect = ((SessionFactoryImplementor) sessionFactory).getDialect();
HibernateTemplate hibernateTemplate = new HibernateTemplate(sessionFactory);
hibernateTemplate.setFlushMode(HibernateTemplate.FLUSH_NEVER); hibernateTemplate.setFlushMode(HibernateTemplate.FLUSH_NEVER);
hibernateTemplate.execute( hibernateTemplate.execute(
new HibernateCallback<Object>() { new HibernateCallback<Object>() {
public Object doInHibernate(Session session) throws HibernateException, SQLException { public Object doInHibernate(Session session) throws HibernateException, SQLException {
Connection con = session.connection(); Connection con = session.connection();
Dialect dialect = Dialect.getDialect(getConfiguration().getProperties());
DatabaseMetadata metadata = new DatabaseMetadata(con, dialect); DatabaseMetadata metadata = new DatabaseMetadata(con, dialect);
String[] sql = getConfiguration().generateSchemaUpdateScript(dialect, metadata); String[] sql = getConfiguration().generateSchemaUpdateScript(dialect, metadata);
executeSchemaScript(con, sql); executeSchemaScript(con, sql);
@@ -973,13 +975,14 @@ public class LocalSessionFactoryBean extends AbstractSessionFactoryBean implemen
configTimeDataSourceHolder.set(dataSource); configTimeDataSourceHolder.set(dataSource);
} }
try { try {
HibernateTemplate hibernateTemplate = new HibernateTemplate(getSessionFactory()); SessionFactory sessionFactory = getSessionFactory();
final Dialect dialect = ((SessionFactoryImplementor) sessionFactory).getDialect();
HibernateTemplate hibernateTemplate = new HibernateTemplate(sessionFactory);
hibernateTemplate.setFlushMode(HibernateTemplate.FLUSH_NEVER); hibernateTemplate.setFlushMode(HibernateTemplate.FLUSH_NEVER);
hibernateTemplate.execute( hibernateTemplate.execute(
new HibernateCallback<Object>() { new HibernateCallback<Object>() {
public Object doInHibernate(Session session) throws HibernateException, SQLException { public Object doInHibernate(Session session) throws HibernateException, SQLException {
Connection con = session.connection(); Connection con = session.connection();
Dialect dialect = Dialect.getDialect(getConfiguration().getProperties());
DatabaseMetadata metadata = new DatabaseMetadata(con, dialect, false); DatabaseMetadata metadata = new DatabaseMetadata(con, dialect, false);
getConfiguration().validateSchema(dialect, metadata); getConfiguration().validateSchema(dialect, metadata);
return null; return null;
@@ -1009,12 +1012,13 @@ public class LocalSessionFactoryBean extends AbstractSessionFactoryBean implemen
*/ */
public void dropDatabaseSchema() throws DataAccessException { public void dropDatabaseSchema() throws DataAccessException {
logger.info("Dropping database schema for Hibernate SessionFactory"); logger.info("Dropping database schema for Hibernate SessionFactory");
HibernateTemplate hibernateTemplate = new HibernateTemplate(getSessionFactory()); SessionFactory sessionFactory = getSessionFactory();
final Dialect dialect = ((SessionFactoryImplementor) sessionFactory).getDialect();
HibernateTemplate hibernateTemplate = new HibernateTemplate(sessionFactory);
hibernateTemplate.execute( hibernateTemplate.execute(
new HibernateCallback<Object>() { new HibernateCallback<Object>() {
public Object doInHibernate(Session session) throws HibernateException, SQLException { public Object doInHibernate(Session session) throws HibernateException, SQLException {
Connection con = session.connection(); Connection con = session.connection();
Dialect dialect = Dialect.getDialect(getConfiguration().getProperties());
String[] sql = getConfiguration().generateDropSchemaScript(dialect); String[] sql = getConfiguration().generateDropSchemaScript(dialect);
executeSchemaScript(con, sql); executeSchemaScript(con, sql);
return null; return null;
@@ -1044,12 +1048,13 @@ public class LocalSessionFactoryBean extends AbstractSessionFactoryBean implemen
configTimeDataSourceHolder.set(dataSource); configTimeDataSourceHolder.set(dataSource);
} }
try { try {
HibernateTemplate hibernateTemplate = new HibernateTemplate(getSessionFactory()); SessionFactory sessionFactory = getSessionFactory();
final Dialect dialect = ((SessionFactoryImplementor) sessionFactory).getDialect();
HibernateTemplate hibernateTemplate = new HibernateTemplate(sessionFactory);
hibernateTemplate.execute( hibernateTemplate.execute(
new HibernateCallback<Object>() { new HibernateCallback<Object>() {
public Object doInHibernate(Session session) throws HibernateException, SQLException { public Object doInHibernate(Session session) throws HibernateException, SQLException {
Connection con = session.connection(); Connection con = session.connection();
Dialect dialect = Dialect.getDialect(getConfiguration().getProperties());
String[] sql = getConfiguration().generateSchemaCreationScript(dialect); String[] sql = getConfiguration().generateSchemaCreationScript(dialect);
executeSchemaScript(con, sql); executeSchemaScript(con, sql);
return null; return null;