Spring 4和Hibernate 5给出NoSuchMethodError org.hibernate.internal.CoreMessageLogger

时间:2015-10-29 16:15:57

标签: spring-mvc hibernate-4.x hibernate-5.x

所以,我有一个成功的Spring 4.2.2.RELEASE MVC web-app使用Hibernate 4.3.8.Final。我改为Hibernate 5.0.2.Final,并对Spring应用程序上下文文件进行了以下更改。

自:

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

要:

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">

来自:

<bean id="transactionManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">

要:

<bean id="transactionManager"
    class="org.springframework.orm.hibernate5.HibernateTransactionManager">

我无法在网络上的任何其他地方找到此问题。我确信我已经检查了我的类路径,并且在任何级别的应用程序中都没有其他任何Hibernate4引用。

当我尝试执行我的DaoTestCode时,由于此错误消息,Spring应用程序上下文将不会加载:

java.lang.NoSuchMethodError: org.hibernate.internal.CoreMessageLogger.debug

我试图在网上找到其他地方,它显示了使用Spring 4.2.2的Hibernate 5的正确配置,我找不到任何东西。我知道我经历了从Hibernate 3到Hibernate 4的一些痛苦,现在我想要相应地迁移。我知道会有一些痛点。 有没有办法解决这个问题,以及我应该注意的任何其他未来问题?

谢谢!

2 个答案:

答案 0 :(得分:3)

更新了我的pom文件,将我的所有日​​志记录罐更新到最新版本:

    <!-- Logging Dependencies -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
        <exclusions>
            <exclusion>
                <groupId>com.sun.jdmk</groupId>
                <artifactId>jmxtools</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.sun.jmx</groupId>
                <artifactId>jmxri</artifactId>
            </exclusion>
            <exclusion>
                <groupId>javax.jms</groupId>
                <artifactId>jms</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.12</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.logging</groupId>
        <artifactId>jboss-logging</artifactId>
        <version>3.3.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.12</version>
    </dependency>

这解决了我的问题!

答案 1 :(得分:0)

我认为这是一个类路径问题。

您是否已检入应用程序服务器的库?

方法org.hibernate.internal.CoreMessageLogger.debug继承自org.jboss.logging.BasicLogger,并在hibernate 4之后添加。 你在类路径中使用正确的版本进行jboss-logging吗?

也许你在类路径中有hibernate 3 lib?

相关问题