【问题标题】:NoSuchMethodError error create session factoryNoSuchMethodError 错误创建会话工厂
【发布时间】:2015-12-16 18:51:08
【问题描述】:

我正在尝试使用 hibernate 创建项目,但我在创建 session factory 的行中有异常,如果我删除此行 - 项目将成功运行。 我正在寻找解决我读了这篇文章,并添加了依赖hibernate-commons-annotations,但这并不能解决问题

Caused by: java.lang.NoSuchMethodError: org.hibernate.annotations.common.reflection.java.JavaReflectionManager.injectClassLoaderDelegate(Lorg/hibernate/annotations/common/reflection/ClassLoaderDelegate;)V
    at org.hibernate.boot.internal.MetadataBuilderImpl$MetadataBuildingOptionsImpl.generateDefaultReflectionManager(MetadataBuilderImpl.java:737)
    at org.hibernate.boot.internal.MetadataBuilderImpl$MetadataBuildingOptionsImpl.<init>(MetadataBuilderImpl.java:709)
    at org.hibernate.boot.internal.MetadataBuilderImpl.<init>(MetadataBuilderImpl.java:127)
    at org.hibernate.boot.MetadataSources.getMetadataBuilder(MetadataSources.java:135)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:655)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724)
    at com.secure.dao.impl.UserDaoImpl.<init>(UserDaoImpl.java:20)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)

行是:

at com.secure.dao.impl.UserDaoImpl.<init>(UserDaoImpl.java:20)

等于代码中的行:

private SessionFactory sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();

依赖项

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.2.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>4.2.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>4.0.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-core</artifactId>
        <version>4.0.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>4.0.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-taglibs</artifactId>
        <version>4.0.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>5.0.1.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.0.1.Final</version>
    </dependency>
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.4-1203-jdbc42</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.12</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-commons-annotations</artifactId>
        <version>3.2.0.Final</version>
    </dependency>
</dependencies>

【问题讨论】:

  • 只是出于好奇 - 为什么你的 pom.xml 中需要 hibernate-commons-annotations?
  • 哦,我看文章时注意力不集中,那里描述了ClassCastException,但我有NoSuchMethodError
  • 对。即使您有 ClassCastException,本文也建议删除 hibernate-commons-annotations,而不是添加它。
  • 实际上,您可能希望从 pom.xml 中删除它,然后清理您的 maven 存储库并重新安装您的项目,例如从命令行: mvn -U clean install

标签: java spring hibernate


【解决方案1】:

从 Hibernate v3.6 开始,注释类已合并到核心中。您已经指定了一个非常旧的注解 jar 的依赖项,它不能与 Hibernate 核心 5.0.1 一起编译。

只需删除对hibernate-commons-annotations 的依赖,这应该可以解决。

【讨论】:

  • 是的,我在阅读pzeszko的评论时解决了这个问题,谢谢!
猜你喜欢
  • 1970-01-01
  • 2019-02-06
  • 2019-04-07
  • 1970-01-01
  • 2011-12-11
  • 2011-12-20
  • 2016-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多