Potential hibernate version issue: java.lang.NoSuchMethodError: org.hibernate.cfg.Configuration.setListener(Ljava/lang/String;Ljava/lang/Object;)
Potential hibernate version issue: java.lang.NoSuchMethodError: org.hibernate.cfg.Configuration.setListener(Ljava/lang/String;Ljava/lang/Object;)
我正在尝试使用 Intellij 调试 Grails 项目(来自另一个开发人员),运行遇到此错误:
ERROR org.codehaus.groovy.grails.web.context.GrailsContextLoaderListener - Error initializing
the application: Error creating bean with name 'transactionManagerPostProcessor': 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.NoSuchMethodError:
org.hibernate.cfg.Configuration.setListener(Ljava/lang/String;Ljava/lang/Object;)V
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'transactionManagerPostProcessor': 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.NoSuchMethodError:
org.hibernate.cfg.Configuration.setListener(Ljava/lang/String;Ljava/lang/Object;)V
通过研究论坛,我怀疑加载程序指的是存在于 Hibernate-3 而不是 Hibernate-4 中的 class。我正在使用 IntelliJ 的 Hibernate 插件,但我看不出为什么要加载 Hibernate-4。
但是,当我创建虚拟 Grails 应用程序时,我没有 运行 出现此错误。
有什么想法吗?
您需要 运行 grails dependency-report
。它将生成如下依赖关系报告。
+--- org.grails.plugins:hibernate:3.6.10.18
| \--- org.hibernate:hibernate-ehcache:3.6.10.Final
| \--- org.grails:grails-datastore-core:3.1.3.RELEASE
| \--- org.javassist:javassist:3.17.1-GA
| \--- javax.transaction:jta:1.1
| \--- org.grails:grails-datastore-gorm:3.1.3.RELEASE
| \--- org.grails:grails-datastore-gorm-hibernate:3.1.3.RELEASE
| \--- org.grails:grails-datastore-gorm-hibernate-core:3.1.3.RELEASE
| \--- org.grails:grails-datastore-gorm-plugin-support:3.1.3.RELEASE
| \--- org.springframework:spring-orm:4.0.7.RELEASE
| \--- org.grails:grails-datastore-simple:3.1.3.RELEASE
| \--- commons-collections:commons-collections:3.2.1
| \--- org.hibernate:hibernate-core:3.6.10.Final
| \--- javax.validation:validation-api:1.0.0.GA
| \--- org.hibernate:hibernate-validator:4.1.0.Final
| \--- org.hibernate:hibernate-entitymanager:3.6.10.Final
| \--- org.hibernate:hibernate-commons-annotations:3.2.0.Final
+--- org.grails.plugins:database-migration:1.4.0
| \--- org.liquibase:liquibase-core:2.0.5
+--- org.apache.httpcomponents:httpclient:4.2.3
| \--- org.apache.httpcomponents:httpcore:4.2.2
| \--- commons-codec:commons-codec:1.6
+--- org.apache.httpcomponents:httpmime:4.2.3
这将列出您的项目正在使用的所有依赖项。搜索 hibernate4 并查看是否有任何插件引用了 hibernate4。删除或升级插件以使用 hibernate3。
原来我应该通过 Intellij 的项目结构对话框手动指定 Hibernate 的版本(在 Mac 上是通过文件 -> 项目结构)。单击 Dependencies,您将看到如下内容:
如果您 double-click 使用 Hibernate,您会看到如下内容:
在那里,单击 更改版本 并指定所需的库版本。
请注意,更改还要求我删除 lib 和 target 文件夹,然后重新运行 IntelliJ 才能生效。
我正在尝试使用 Intellij 调试 Grails 项目(来自另一个开发人员),运行遇到此错误:
ERROR org.codehaus.groovy.grails.web.context.GrailsContextLoaderListener - Error initializing
the application: Error creating bean with name 'transactionManagerPostProcessor': 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.NoSuchMethodError:
org.hibernate.cfg.Configuration.setListener(Ljava/lang/String;Ljava/lang/Object;)V
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'transactionManagerPostProcessor': 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.NoSuchMethodError:
org.hibernate.cfg.Configuration.setListener(Ljava/lang/String;Ljava/lang/Object;)V
通过研究论坛,我怀疑加载程序指的是存在于 Hibernate-3 而不是 Hibernate-4 中的 class。我正在使用 IntelliJ 的 Hibernate 插件,但我看不出为什么要加载 Hibernate-4。
但是,当我创建虚拟 Grails 应用程序时,我没有 运行 出现此错误。
有什么想法吗?
您需要 运行 grails dependency-report
。它将生成如下依赖关系报告。
+--- org.grails.plugins:hibernate:3.6.10.18
| \--- org.hibernate:hibernate-ehcache:3.6.10.Final
| \--- org.grails:grails-datastore-core:3.1.3.RELEASE
| \--- org.javassist:javassist:3.17.1-GA
| \--- javax.transaction:jta:1.1
| \--- org.grails:grails-datastore-gorm:3.1.3.RELEASE
| \--- org.grails:grails-datastore-gorm-hibernate:3.1.3.RELEASE
| \--- org.grails:grails-datastore-gorm-hibernate-core:3.1.3.RELEASE
| \--- org.grails:grails-datastore-gorm-plugin-support:3.1.3.RELEASE
| \--- org.springframework:spring-orm:4.0.7.RELEASE
| \--- org.grails:grails-datastore-simple:3.1.3.RELEASE
| \--- commons-collections:commons-collections:3.2.1
| \--- org.hibernate:hibernate-core:3.6.10.Final
| \--- javax.validation:validation-api:1.0.0.GA
| \--- org.hibernate:hibernate-validator:4.1.0.Final
| \--- org.hibernate:hibernate-entitymanager:3.6.10.Final
| \--- org.hibernate:hibernate-commons-annotations:3.2.0.Final
+--- org.grails.plugins:database-migration:1.4.0
| \--- org.liquibase:liquibase-core:2.0.5
+--- org.apache.httpcomponents:httpclient:4.2.3
| \--- org.apache.httpcomponents:httpcore:4.2.2
| \--- commons-codec:commons-codec:1.6
+--- org.apache.httpcomponents:httpmime:4.2.3
这将列出您的项目正在使用的所有依赖项。搜索 hibernate4 并查看是否有任何插件引用了 hibernate4。删除或升级插件以使用 hibernate3。
原来我应该通过 Intellij 的项目结构对话框手动指定 Hibernate 的版本(在 Mac 上是通过文件 -> 项目结构)。单击 Dependencies,您将看到如下内容:
如果您 double-click 使用 Hibernate,您会看到如下内容:
在那里,单击 更改版本 并指定所需的库版本。
请注意,更改还要求我删除 lib 和 target 文件夹,然后重新运行 IntelliJ 才能生效。