Database 我如何避免';无法确定数据库名称[H2]的Hibernate方言';?
运行Database 我如何避免';无法确定数据库名称[H2]的Hibernate方言';?,database,hibernate,grails,persistence,h2,Database,Hibernate,Grails,Persistence,H2,运行grails run app时出现此错误: 执行引导时出错:创建名为的bean时出错 “messageSource”:bean初始化失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 正在创建名为“transactionManager”的bean:无法解析引用 设置bean属性“sessionFactory”时调用bean“sessionFactory”; 嵌套异常是 org.springframework.
grails run app
时出现此错误:
执行引导时出错:创建名为的bean时出错
“messageSource”:bean初始化失败;嵌套异常是
org.springframework.beans.factory.BeanCreationException:错误
正在创建名为“transactionManager”的bean:无法解析引用
设置bean属性“sessionFactory”时调用bean“sessionFactory”;
嵌套异常是
org.springframework.beans.factory.BeanCreationException:错误
正在创建名为“sessionFactory”的bean:无法解析对的引用
设置bean属性时bean“hibernateProperties”
“hibernateProperties”;嵌套异常是
org.springframework.beans.factory.BeanCreationException:错误
正在创建名为“hibernateProperties”的bean:无法解析
设置bean属性时对bean“方言检测器”的引用
带有键[hibernate.dial]的“属性”;嵌套异常是
org.springframework.beans.factory.BeanCreationException:错误
创建名为“方言检测器”的bean:init方法的调用
失败;嵌套异常是
org.codehaus.groovy.grails.orm.hibernate.exceptions.CouldNotDetermineHibernateDialectException:
无法确定数据库名称[H2]的Hibernate方言
相应的数据源.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 }
}
当我显式提供上述方言时(org.hibernate.dialogue.h2dialogue
),则会发生以下错误:
执行引导时出错:创建名为“messageSource”的bean时出错:bean初始化失败;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“transactionManager”的bean时出错:设置bean属性“sessionFactory”时无法解析对bean“sessionFactory”的引用;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“sessionFactory”的bean时出错:调用init方法失败;嵌套异常为java.lang.CompatibleClassChangeError:找到类org.hibernate.cfg.Mappings,但应为接口
有人知道如何应对吗?
(错误报告的存在形式为)您使用的是哪个版本的Grails?我相信您正在使用Grails1.3.7 H2Dialet有一些来自Hibernate.jar的bug,Hibernate.jar在grails1.3.7中是3.3.1,它包含在hibernate3.5和grails2.0中 我的解决方案是,在DataSource.groovy中,使用
dialect='org.hibernate.dialect.H2DialectPatch'
然后从这里下载Java类:,将其类名更改为H2方言补丁以避免混淆,将其放在您的src/Java文件夹中。我刚刚升级到Grails 2.0,遇到了同样的问题,但是如果我创建了一个全新的Grails 2.0项目,就不会出现这样的问题。我把这个答案留给任何可能有同样经历的人。确保使用正确的hibernate库非常重要 如果像我一样,您正在升级现有项目,我建议您将现有项目的配置文件与全新2.0项目的配置文件进行比较。执行此操作时,您将看到构建配置文件应包含一个hibernate插件:
runtime ":hibernate:$grailsVersion"
这是Joda Time插件中的一个bug。有关详细信息,请参见前面提到的。如果jdk是Java 7u25和grails 2.2.1,可能是一种解决方案: Grails2.2.3中修复的错误信息是正确的。我测试了它,它成功了。需要指出的一点是():
我希望您觉得它很有用:)问题似乎与JDK 7(openjdk 7u25)的版本有关 另一种选择是将Ubuntu PPA用于Oracle JDK:
这对我来说很好,解决了问题 我使用的是2.0.0.BUILD-SNAPSHOT。我不确定,但我认为问题也出现在2.0.0.M1中(至少是一些与H2相关的错误),但它不知何故“消失”了,现在又回来了。根据你链接的Jira,我想该补丁已经在当前版本中了?我还没有试用Grails2.0,所以我真的不知道该补丁是否包含在内。我在Grails1.3.7和H2数据库的3个生产应用程序中使用了这种方法,所有这些都运行良好。从Google中查找一些东西,不确定是否有用。谢谢你的提示。我在
hibernate/hibernate dialogs.properties
中尝试了该声明,但它似乎与DataSource.groovy中的dialogue=org.hibernate.dialogue.h2dialogue
相同。至少它会产生同样的错误,这个错误似乎在Grails2.2.4中再次出现