NoSuchMethodError: LocalSessionFactoryBuilder.addA

2019-08-28 02:36发布

问题:

I am using Spring 3.2 and Hibernate4. I included all Jars required. Using JBoss AS. Deploying from Eclipse. But I am getting this error.

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 
'personController': Injection of autowired dependencies failed; nested exception is 
org.springframework.beans.factory.BeanCreationException: Could not autowire field: private 
com.springmvcsample.service.PersonService 
com.springmvcsample.controller.PersonController.personService; nested exception is 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 
'personService': Injection of autowired dependencies failed; nested exception is 
org.springframework.beans.factory.BeanCreationException: Could not autowire field: private 
com.springmvcsample.dao.PersonDAO com.springmvcsample.service.PersonServiceImpl.personDao; nested 
exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with 
name 'personDao': Injection of autowired dependencies failed; nested exception is    
 org.springframework.beans.factory.BeanCreationException: Could not autowire field: 
 org.hibernate.SessionFactory com.springmvcsample.dao.PersonDAOImpl.sessionFactory; nested 
 exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with 
 name 'sessionFactory' defined in ServletContext resource [/WEB-INF/hibernate_config.xml]: 
 Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: 
 org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.addAnnotatedClass
 (Ljava/lang/Class;)Lorg/hibernate/cfg/Configuration;

Web.xml

   <servlet>
   <servlet-name> SpringMVC_Hibernate</servlet-name>
    <servlet-class>
              org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
   <load-on-startup>1</load-on-startup>
    </servlet>

   <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/SpringMVC_Hibernate-servlet.xml</param-value>
  </context-param>

 <servlet-mapping>
   <servlet-name>SpringMVC_Hibernate</servlet-name>
   <url-pattern>*.htm</url-pattern>
 </servlet-mapping>

SpringMVC_Hibernate-servlet.xml

        <context:component-scan base-package="com.springmvcsample.controller"/>
    <context:component-scan base-package="com.springmvcsample.dao"/>
    <context:component-scan base-package="com.springmvcsample.service"/>
    <import resource="hibernate_config.xml"/>

    <mvc:annotation-driven content-negotiation-manager="contentNegotiationManager"/>
    <bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
        <!-- Turn off working out content type based on URL file extension, should fall back to looking at the Accept headers -->
        <property name="favorPathExtension" value="false" />
    </bean>

    <bean name="sender" class="com.springmvcsample.utility.MessageSender"/>

hibernate_config.xml

  <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>/resources/db.properties</value>
        </list>
    </property>
</bean>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.user}" />
    <property name="password" value="${jdbc.password}" />
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="packagesToScan" value="com.springmvcsample.controller" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>

        </props>
    </property>
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>

<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

Additional jars include:

  spring-jms-3.2x.jar 
  spring-orm-*.jar
  spring-tx-*.jar
  spring-web-*.jar
  spring-webmvc-*.jar

回答1:

Using Maven makes life easier in such cases.

Opening the pom.xml in IDE like Eclipse / STS will give you a better picture like following:-