From 045c97f75e231b99ebeaab48b72ccb9e1e07004b Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Fri, 9 Mar 2012 11:20:52 +0200 Subject: [PATCH] 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 --- .../hibernate3/LocalSessionFactoryBean.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate3/LocalSessionFactoryBean.java b/spring-orm/src/main/java/org/springframework/orm/hibernate3/LocalSessionFactoryBean.java index 887ceaed81..bd31d58058 100644 --- a/spring-orm/src/main/java/org/springframework/orm/hibernate3/LocalSessionFactoryBean.java +++ b/spring-orm/src/main/java/org/springframework/orm/hibernate3/LocalSessionFactoryBean.java @@ -39,6 +39,7 @@ import org.hibernate.cfg.Environment; import org.hibernate.cfg.NamingStrategy; import org.hibernate.dialect.Dialect; import org.hibernate.engine.FilterDefinition; +import org.hibernate.engine.SessionFactoryImplementor; import org.hibernate.event.EventListeners; import org.hibernate.tool.hbm2ddl.DatabaseMetadata; import org.hibernate.transaction.JTATransactionFactory; @@ -930,13 +931,14 @@ public class LocalSessionFactoryBean extends AbstractSessionFactoryBean implemen configTimeDataSourceHolder.set(dataSource); } 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.execute( new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Connection con = session.connection(); - Dialect dialect = Dialect.getDialect(getConfiguration().getProperties()); DatabaseMetadata metadata = new DatabaseMetadata(con, dialect); String[] sql = getConfiguration().generateSchemaUpdateScript(dialect, metadata); executeSchemaScript(con, sql); @@ -973,13 +975,14 @@ public class LocalSessionFactoryBean extends AbstractSessionFactoryBean implemen configTimeDataSourceHolder.set(dataSource); } 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.execute( new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Connection con = session.connection(); - Dialect dialect = Dialect.getDialect(getConfiguration().getProperties()); DatabaseMetadata metadata = new DatabaseMetadata(con, dialect, false); getConfiguration().validateSchema(dialect, metadata); return null; @@ -1009,12 +1012,13 @@ public class LocalSessionFactoryBean extends AbstractSessionFactoryBean implemen */ public void dropDatabaseSchema() throws DataAccessException { 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( new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Connection con = session.connection(); - Dialect dialect = Dialect.getDialect(getConfiguration().getProperties()); String[] sql = getConfiguration().generateDropSchemaScript(dialect); executeSchemaScript(con, sql); return null; @@ -1044,12 +1048,13 @@ public class LocalSessionFactoryBean extends AbstractSessionFactoryBean implemen configTimeDataSourceHolder.set(dataSource); } try { - HibernateTemplate hibernateTemplate = new HibernateTemplate(getSessionFactory()); + SessionFactory sessionFactory = getSessionFactory(); + final Dialect dialect = ((SessionFactoryImplementor) sessionFactory).getDialect(); + HibernateTemplate hibernateTemplate = new HibernateTemplate(sessionFactory); hibernateTemplate.execute( new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Connection con = session.connection(); - Dialect dialect = Dialect.getDialect(getConfiguration().getProperties()); String[] sql = getConfiguration().generateSchemaCreationScript(dialect); executeSchemaScript(con, sql); return null;