Hibernate – How to avoid ‘Could not determine Hibernate dialect for database name [H2]!’

databasegrailsh2hibernatepersistence

I am getting this error when running grails run-app:

Error executing bootstraps: Error creating bean with name
'messageSource': Initialization of bean failed; nested exception is
org.springframework.beans.factory.BeanCreationException: Error
creating bean with name 'transactionManager': Cannot resolve reference
to bean 'sessionFactory' while setting bean property 'sessionFactory';
nested exception is
org.springframework.beans.factory.BeanCreationException: Error
creating bean with name 'sessionFactory': Cannot resolve reference to
bean 'hibernateProperties' while setting bean property
'hibernateProperties'; nested exception is
org.springframework.beans.factory.BeanCreationException: Error
creating bean with name 'hibernateProperties': Cannot resolve
reference to bean 'dialectDetector' while setting bean property
'properties' with key [hibernate.dialect]; nested exception is
org.springframework.beans.factory.BeanCreationException: Error
creating bean with name 'dialectDetector': Invocation of init method
failed; nested exception is
org.codehaus.groovy.grails.orm.hibernate.exceptions.CouldNotDetermineHibernateDialectException:
Could not determine Hibernate dialect for database name [H2]!

The according DataSource.groovy:

dataSource {
  pooled = true
  driverClassName = "org.h2.Driver"
  username = "sa"
  password = ""
  // Adding this causes a different error:
  // dialect = org.hibernate.dialect.H2Dialect
}

hibernate {
  cache.use_second_level_cache = true
  cache.use_query_cache = true
  cache.provider_class = 'net.sf.ehcache.hibernate.EhCacheProvider'
}

environments {
  development {
    dataSource {
      dbCreate = "create-drop" // one of 'create', 'create-drop','update'
      url = "jdbc:h2:mem:devDB"
    }
  }
  test { // test-related stuff }
  production { // prod-related stuff }
}

When I explicitly provide the dialect as stated above (org.hibernate.dialect.H2Dialect), then this error occurs:

Error executing bootstraps: Error creating bean with name 'messageSource': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Invocation of init method failed; nested exception is java.lang.IncompatibleClassChangeError: Found class org.hibernate.cfg.Mappings, but interface was expected

Anyone know how to cope with this?

(Bug-report exists as http://jira.grails.org/browse/GRAILS-7994)

Best Answer

This was a bug in the Joda Time Plugin. See the mentioned JIRA issue for details.

Related Topic