"Ошибка создания bean-компонента" в Hibernate с Spring

Я работаю над проектом Spring с Hibernate, который также использует Maven. Я пытаюсь сделать страницу, которая имеет форму для сбора информации о поиске, а также отображения результатов. Я создал dispatcher-servlet, web.xml, controller, model и view, но когда я пытаюсь запустить проект на сервере, я получаю следующую ошибку 500:

Servlet.init () для исключения диспетчера сервлетов (трассировка стека и файлы ниже).

Я немного сбит с толку, потому что я следую учебному пособию, и я верю, что все мои зависимости корректны. Я взглянул на трассировку стека, и из того, что я прочитал, кажется, есть проблема с версиями. Я пытался изменить свои версии в pom.xml файл, но не повезло. Я также проверил WEB-INF/lib папка и у меня есть Hibernate-Core, а также другие необходимые банки, так что я думаю, pom.xml настроен правильно.

Из того, что я понимаю в Spring, диспетчер-сервлет должен внедрять bean-компонент sessionFactory, но, похоже, он работает неправильно. Я думаю, что если я смогу преодолеть проблему sessionFactory, я смогу двигаться дальше.

pom.xml (я не совсем уверен, верны ли мои зависимости.)

    <project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
    http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.yccd</groupId>
        <artifactId>StudentDataXML</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>war</packaging>
    <properties>

   <org.springframework.version>4.3.2.RELEASE</org.springframework.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>javax.servlet.jsp-api</artifactId>
                <version>2.3.1</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
                <version>5.1.0.Final</version>
            </dependency>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>5.2.4.Final</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>

            <!-- <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc</artifactId>
        <version>10.2.0</version>
        </dependency> -->
        <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${org.springframework.version}</version>
        </dependency>

        </dependencies>
        <build>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <excludes>
                        <exclude>**/*.java</exclude>
                    </excludes>
                </resource>
                <resource>
                    <directory>src/main/webapp</directory>
                    <excludes>
                        <exclude>**/*.java</exclude>
                    </excludes>
                </resource>
            </resources>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.6.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.0.0</version>
                </plugin>
            </plugins>
        </build>
    </project>

диспетчер-servlet.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"             
    xmlns:aop="http://www.springframework.org/schema/aop"
     xmlns:tx="http://www.springframework.org/schema/tx"     
    xmlns:context="http://www.springframework.org/schema/context"
     xmlns:util="http://www.springframework.org/schema/util"     
    xmlns:mvc="http://www.springframework.org/schema/mvc"
     xsi:schemaLocation="http://www.springframework.org/schema/mvc     
    http://www.springframework.org/schema/mvc/spring-mvc.xsd
      http://www.springframework.org/schema/beans     
    http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/util     
    http://www.springframework.org/schema/util/spring-util.xsd
      http://www.springframework.org/schema/context     
    http://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/tx     
    http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/aop     
    http://www.springframework.org/schema/aop/spring-aop.xsd">


        <context:component-scan base-package="com.yccd.controllers" />
        <context:component-scan base-package="com.yccd.model" />

        <mvc:annotation-driven />

        <bean

    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix">
                <value>/WEB-INF/views/</value>
            </property>
            <property name="suffix">
                <value>.jsp</value>
            </property>
        </bean>

    <context:property-placeholder location="classpath:connection.properties" />
        <bean name="dataSource"
            class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="${jdbc.driverClass}" />
            <property name="url" value="${jdbc.url}" />
            <property name="username" value="${jdbc.username}" />
            <property name="password" value="${jdbc.password}" />
        </bean>
        <bean id="sessionFactory"  
      class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
      <property name="dataSource" ref="dataSource" />
      <property name="annotatedClasses">
       <list>
        <value>com.yccd.model.User</value>    
       </list>
      </property>
      <property name="hibernateProperties">
       <props>
        <prop key="hibernate.dialect">${jdbc.dialect}</prop>
         <prop key="hibernate.hbm2ddl.auto">update</prop>
        <prop key="hibernate.show_sql">true</prop>
       </props>
      </property>
     </bean>
     <tx:annotation-driven />
        <bean id="transactionManager"
      class="org.springframework.orm.hibernate5.HibernateTransactionManager">
      <property name="sessionFactory" ref="sessionFactory" />
     </bean>
    </beans>

StudentController.java (я планирую использовать его в качестве основного контроллера для приложения)

package com.yccd.controllers;

import java.util.Map;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.yccd.model.Student;

@Controller
@RequestMapping(value = "/student")
public class StudentController {

@RequestMapping(value = "/showAll", method = RequestMethod.GET)
public String sayHelloAgain(@PathVariable("queryType") String queryType,     
ModelMap model) {
        model.addAttribute("message", "Just to say hello again");
        model.addAttribute("queryTypeChoice", queryType);
        return "welcomeAgain";
    }

    @RequestMapping(value = "/searchResults", method = RequestMethod.GET)
    public String displayStudents(ModelMap model) {
        return "displayStudentRecords";
    }

    @RequestMapping(value = "/search", method = RequestMethod.POST)
    public String search(Student student, Map<String, Object> map) {
        //TO-DO: GET PARAM VALUES AND MAKE A CALL TO SERVICE LAYER HERE
        return "displayStudentRecords";
    }
}

displayStudentRecords.jsp (это страница, на которой я хочу отобразить записи, полученные из базы данных)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>YCCD - Search</title>
</head>
<body>
<h3>Search Student Record Form</h3>
    <form name="searchStudentsForm" action="/search/searchStudents">
        <table>
            <tr>
                <td>Student ID:</td>
                <td><input type="text" name="stid" /></td>
            </tr>
            <tr>
                <td>Gender:</td>
                <td><input type="text" name="gender" /></td>
            </tr>
            <tr>
                <td>AGE:</td>
                <td><input type="text" name="age" /></td>
            </tr>
            <tr>
            <td colspan="2"><input type="submit" value="Search"></td>
            </tr>
        </table>
    </form>
</body>
</html>

Я довольно новичок в Spring, Hibernate и Maven. Поэтому я прошу прощения, если это кажется тривиальным.

Это только часть трассировки стека. Я не очень хорошо определяю, в чем проблема, глядя на трассировку стека, поэтому, если есть какие-то указатели, которые вы можете указать мне, на какую часть его посмотреть вначале, или есть ли области, на которые я смогу игнорируй, это было бы очень полезно.

Трассировки стека

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping': Invocation of init method failed; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.springframework.orm.hibernate5.LocalSessionFactoryBean] for bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]; nested exception is java.lang.ClassNotFoundException: org.springframework.orm.hibernate5.LocalSessionFactoryBean

Связанная причина:

org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.springframework.orm.hibernate5.LocalSessionFactoryBean] for bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]; nested exception is java.lang.ClassNotFoundException: org.springframework.orm.hibernate5.LocalSessionFactoryBean

1 ответ

Решение

Вам не хватает некоторых весенних зависимостей. Попробуйте с этим (добавьте правильный тег версии к зависимостям):

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-expression</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <scope>test</scope>
    </dependency>
Другие вопросы по тегам