java.lang.NoSuchMethodError : org. hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session;

标签 java hibernate struts2 pom.xml

我在 struts2-fullhibernatecore-plugin 的帮助下链接 Struts2 和 hibernate。

不幸的是我得到了这个错误。我发现问题可能出在我的 hibernate 版本的类路径上。

这是我的pom.xml它现在已经过编辑并且可以完美运行:

    <dependencies>
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-core</artifactId>
        <version>2.3.16</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.9</version>
    </dependency>

    <dependency>
        <groupId>com.google.code</groupId>
        <artifactId>struts2-fullhibernatecore-plugin</artifactId>
        <version>2.2.2-GA</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>3.1.0.GA</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.5</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.5</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>3.3.2.GA</version>
    </dependency>
    <!-- dependencies of hibernate-core -->
    <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
        <version>3.2.1</version>
    </dependency>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.1.1</version>
    </dependency>
    <dependency>
        <groupId>cglib</groupId>
        <artifactId>cglib</artifactId>
        <version>2.2</version>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>

这是错误:

SEVERE: Servlet.service() for servlet [default] in context with path [/StrutsHibernate] threw exception [Filter execution threw an exception] with root cause
java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session;
    at com.googlecode.s2hibernate.struts2.plugin.util.HibernateSessionFactory.createAndTestSessionFactory(HibernateSessionFactory.java:284)
    at com.googlecode.s2hibernate.struts2.plugin.util.HibernateSessionFactory.rebuildSessionFactory(HibernateSessionFactory.java:227)
    at com.googlecode.s2hibernate.struts2.plugin.util.HibernateSessionFactory.getNewSession(HibernateSessionFactory.java:155)
    at com.googlecode.s2hibernate.struts2.plugin.util.HibernateSessionFactory.getSession(HibernateSessionFactory.java:100)
    at com.googlecode.s2hibernate.struts2.plugin.interceptors.SessionTransactionInjectorInterceptor.getHibernateSessionFromFactory(SessionTransactionInjectorInterceptor.java:379)
    at com.googlecode.s2hibernate.struts2.plugin.interceptors.SessionTransactionInjectorInterceptor.injectHibernateCoreSessionByAnnotation(SessionTransactionInjectorInterceptor.java:454)
    at com.googlecode.s2hibernate.struts2.plugin.interceptors.SessionTransactionInjectorInterceptor.injectHibernateCoreSessionByAnnotation(SessionTransactionInjectorInterceptor.java:470)
    at com.googlecode.s2hibernate.struts2.plugin.interceptors.SessionTransactionInjectorInterceptor.intercept(SessionTransactionInjectorInterceptor.java:165)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:249)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)

有人可以看看我的 pom 说那里有什么问题吗?

最佳答案

当一个库(即 struts2-fullhibernatecore-plugin)针对一个版本的依赖项(即 hibernate)编译但针对另一个版本运行时,会发生“NoSuchMethodError”。

从命令行运行以下命令:

mvn dependency:tree

并查看 struts2-fullhibernatecore-plugin 期望的 hibernate 版本。

我猜您会发现 struts2-fullhibernatecore-plugin 需要特定版本的 hibernate。但是由于您在 pom 中明确定义了一个 hibernate 版本,所以 maven 改用这个版本。查看最近的定义 wins strategy here .

要修复,请将 pom.xml 中的 hibernate 版本更改为 struts2-fullhibernatecore-plugin 所需的版本。

关于java.lang.NoSuchMethodError : org. hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21524451/

相关文章:

java - 为什么@JoinColumn在父端但生成的列在子端?

java - 如何限制 20 个 JCombobox 的 1 个选择选项的最大选择数量? javafor 前

java - 如何将 Hibernate 缓存中的项目保留至少 24 小时?

struts2 - 拦截器中的 Struts 2 Session

javascript - 如何使用 jquery 验证插件验证名称中带点的输入字段?

java - Map<String, List> 或 List<List> 的 Hibernate 注释

java - 如何使用 Tuckey urlrewrite 重命名参数?

mysql - @transactional、wildfly、mysql(innodb) ejb 不回滚

java - Hibernate 5 命名策略示例

java - Struts 2选择标签错误