Home Articles

我该如何避免'Could not determine Hibernate dialect for database name [H2]!'?

Asked
Viewed 166 times
2

运行 grails run-app 时出现此错误:

执行bootstraps时出错:创建名为'messageSource'的bean时出错:bean的初始化失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为'transactionManager'的bean时出错:在设置bean属性'sessionFactory'时无法解析对bean'sessionFactory'的引用;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为'sessionFactory'的bean时出错:在设置bean属性'hibernateProperties'时无法解析对bean'hibernateProperties'的引用;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为'hibernateProperties'的bean时出错:使用key [hibernate.dialect]设置bean属性'properties'时,无法解析对bean'dialectDetector'的引用;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为'dialectDetector'的bean时出错:init方法的调用失败;嵌套异常是org.codehaus.groovy.grails.orm.hibernate.exceptions.CouldNotDetermineHibernateDialectException:无法确定数据库名称的Hibernate方言[H2]!

根据 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 aboveorg.hibernate.dialect.H2Dialect ),然后发生此错误:

执行bootstraps时出错:创建名为'messageSource'的bean时出错:bean的初始化失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为'transactionManager'的bean时出错:在设置bean属性'sessionFactory'时无法解析对bean'sessionFactory'的引用;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为'sessionFactory'的bean时出错:init方法的调用失败;嵌套异常是java.lang.IncompatibleClassChangeError:找到类org.hibernate.cfg.Mappings,但接口是预期的

Anyone know how to cope with this?

(错误报告存在http://jira.grails.org/browse/GRAILS-7994

5 Answers

  • 3

    看来这个问题与JDK 7的版本有关(openjdk 7u25) .

    替代方法是使用Ubuntu PPA for Oracle JDK:https://launchpad.net/~webupd8team/+archive/java

    这对我来说很好,并解决了这个问题 .

  • 2

    这是Joda Time Plugin中的一个错误 . 有关详细信息,请参阅上述JIRA issue .

  • 1

    您使用的是哪个版本的Grails?我相信你使用的是Grails 1.3.7 .

    H2Dialet有一些来自Hibernate.jar的错误,它在Grails 1.3.7中是3.3.1,它包含在Hibernate 3.5和Grails 2.0中 .

    我的解决方案是,在您的DataSource.groovy中,使用它

    dialect='org.hibernate.dialect.H2DialectPatch'
    

    并从这里下载Java类:Source Code,将其类名更改为H2DialectPatch以避免混淆,将其放在src / java文件夹中 .

  • 0

    如果jdk是Java 7u25和grails 2.2.1, may be 解决方案:: Grails suddenly throws error Could not determine Hibernate dialect for database name

    在grails 2.2.3中修复错误的信息是正确的 . 我测试了它,它工作 . 要点是(Spring loaded causes Grails to fail to bootstrap using Oracle JDK 1.7u25):

    希望对你有帮助 :)

  • 0

    我刚刚升级到Grails 2.0,并遇到了同样的问题,但如果我创建了一个全新的Grails 2.0项目,则没有这样的问题 . 我把这个答案留给任何可能会遇到同样问题的人 . 确保正确使用正确的hibernate库非常重要 .

    如果像我一样升级现有项目,我建议将现有项目的配置文件与全新2.0项目的配置文件进行比较 . 执行此操作,您将看到构建配置文件应包含一个hibernate插件:

    runtime ":hibernate:$grailsVersion"
    

Related