Ошибка при создании bean-компонента с именем homeController: не удалось ввести автоматически подключенные зависимости

Весной пытаюсь создать электронную коммерцию. После включения базы данных «Hibernate» и «H2» в мой проект я получаю сообщение об ошибке. Ошибка приведена ниже. Я очень стараюсь, но не нашел решения.

Ошибка:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'homeController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.home.dao.ProductDao com.home.controller.homeController.productDao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'productDaoImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.SessionFactory com.home.dao.impl.ProductDaoImpl.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.exception.GenericJDBCException: Unable to open JDBC Connection for DDL execution

applicationContext.xml

<bean id = "dataSource"
    class = "org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name = "driverClassName" value = "org.h2.Driver" />
    <property name = "url" value = "jdbc:h2:~/test" />
    <property name = "username" value = "sa" />
    <property name = "password" value = "" />
</bean>

<bean id = "sessionFactory"
    class = "org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name = "dataSource" ref = "dataSource"></property>
    <property name = "hibernateProperties">
        <props>
            <prop key = "hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
            <prop key = "hibernate.hbm2ddl.auto">update</prop>
            <prop key = "hibernate.show_sql">true</prop>
            <prop key = "hibernate.format_sql">true</prop>
        </props>
    </property>
    <property name = "packagesToScan">
        <list>
            <value>com.home</value>
        </list>
    </property>
</bean>

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

home-servlet.xml

<context:component-scan base-package = "com.home">
    <context:include-filter type = "aspectj" expression = "com.home.*" />
</context:component-scan>

<mvc:annotation-driven />

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

</bean>

<mvc:resources mapping = "/resources/**"
    location = "/WEB-INF/resources/" cache-period = "31556926" />


<tx:annotation-driven />

web.xml

<display-name>Archetype Created Web Application</display-name>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/home-servlet.xml,
        /WEB-INF/applicationContext.xml
    </param-value>
</context-param>

<servlet>
    <servlet-name>home</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>home</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

homeController.java

@Controller
@Configuration
public class homeController {

@Autowired
private ProductDao productDao;

@RequestMapping("/")
public String home() {
    return "views/home";
}


@RequestMapping("/productList")
public String getProducts(Model model) {
    List<Product> products = productDao.getAllProducts();
    model.addAttribute("products", products);

    return "views/productList";
}

@RequestMapping("/productList/viewProduct/{productId}")
public String viewProduct(@PathVariable String productId, Model model) throws IOException{

    Product product = productDao.getProductById(productId);
    model.addAttribute(product);

    return "views/viewProduct";
}

}

ProductDaoImpl.java

@Repository
@Transactional
public class ProductDaoImpl implements ProductDao {

@Autowired
private SessionFactory sessionFactory;

public void addProduct(Product product) {
    Session session = sessionFactory.getCurrentSession();
    session.saveOrUpdate(product);
    session.flush();
}

public Product getProductById(String id) {
    Session session = sessionFactory.getCurrentSession();
    Product product = (Product) session.get(Product.class, id);
    session.flush();

    return product;
}

public List<Product> getAllProducts() {
    Session session = sessionFactory.getCurrentSession();
    Query query = session.createQuery("from Product");
    List<Product> products = query.list();
    session.flush();

    return products;
}

public void deleteProduct (String id) {
    Session session = sessionFactory.getCurrentSession();
    session.delete(getProductById(id));
    session.flush();
}

}

Код Product.java:

@Entity

public class Product {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private String productId;
private String productName;
private String productCategory;
private String productDescription;
private double productPrice;
private String productCondition;
private String productStatus;
private int unitInStock;
private String productManufacturer;

public String getProductId() {
    return productId;
}

public void setProductId(String productId) {
    this.productId = productId;
}

public String getProductName() {
    return productName;
}

public void setProductName(String productName) {
    this.productName = productName;
}

public String getProductCategory() {
    return productCategory;
}

public void setProductCategory(String productCategory) {
    this.productCategory = productCategory;
}

public String getProductDescription() {
    return productDescription;
}

public void setProductDescription(String productDescription) {
    this.productDescription = productDescription;
}

public double getProductPrice() {
    return productPrice;
}

public void setProductPrice(double productPrice) {
    this.productPrice = productPrice;
}

public String getProductCondition() {
    return productCondition;
}

public void setProductCondition(String productCondition) {
    this.productCondition = productCondition;
}

public String getProductStatus() {
    return productStatus;
}

public void setProductStatus(String productStatus) {
    this.productStatus = productStatus;
}

public int getUnitInStock() {
    return unitInStock;
}

public void setUnitInStock(int unitInStock) {
    this.unitInStock = unitInStock;
}

public String getProductManufacturer() {
    return productManufacturer;
}

public void setProductManufacturer(String productManufacturer) {
    this.productManufacturer = productManufacturer;
}

}

Код ProductDao.java: public interface ProductDao {

void addProduct(Product product);

Product getProductById(String id);

List<Product> getAllProducts();

void deleteProduct(String id);

}

Структура проекта или изображение каталога:Структура проекта или каталог в моей Eclipse Oxygen IDE

Можете ли вы поделиться структурой каталогов и ProductDao?

Nicholas K 16.01.2019 18:17

#Nicholas K, пожалуйста, просмотрите сообщение об обновлении, где я добавил код ProductDao .java и проверил изображение структуры каталогов моего проекта. Танки за ваш комментарий.

S. Rayhan Kabir 16.01.2019 19:56
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
1 409
2

Ответы 2

ProductDao не фасоль .. Вот почему. Репозиторий, контроллер, служба - все это типы bean-компонентов. Убедитесь, что это именно этот тип фасоли ..... Спасибо.

Наконец, я обнаружил свои собственные проблемы, когда использую IntelliJ IDEA IDE. Проблемы приведены ниже:

  1. Моя проблема возникла в файле pom.xml. Здесь я использовал зависимость последней версии спящий режим (5.4.0.Финал), которая не поддерживает пакет import org.hibernate.Query;, а также не поддерживает коды Запрос query = session.createQuery ("из продукта"); и Продукт product = (Продукт) session.get (Product.class, id); в классе ProductDaoImpl.java.

  2. Я также использовал последнюю версию зависимостей весна-webmvc, пружинный стержень и весна-орм в файле pom.xml. Из-за этого возникает конфликт версий.

Решение:

  1. Забудьте об Eclipse и избегайте его. Пожалуйста, используйте IntelliJ IDEA. Это очень удобная IDE для среды Java Spring MVC, которая также показывает, что вы делаете не так.

  2. Создать новый проект и использовать зависимость версии спящий режим ядра 4.0.1.Финал в файле pom.xml, а также использовать собственную версию 4.2.8.РЕЛИЗ, зависимости пружинный стержень и весна-орм.

    1. Удалите пакет import org.hibernate.Query.query; из класса ProductDaoImpl.java и поместите пакет импортировать org.hibernate.Query.

Спасибо :)

Другие вопросы по теме