【发布时间】:2018-09-23 02:56:49
【问题描述】:
我得到一个很长的嵌套异常,最后一个是:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.hibernate.SessionFactory] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at ...
这是我的 DAO
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import ar.edu.itba.paw.FileUploadDao;
import ar.edu.itba.paw.models.UploadFile;
@Repository
public class FileUploadDAOImpl implements FileUploadDao {
@Autowired
private SessionFactory sessionFactory;
public FileUploadDAOImpl() {
}
public FileUploadDAOImpl(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Transactional
public void save(UploadFile uploadFile) {
sessionFactory.getCurrentSession().save(uploadFile);
}
}
这是我在 DAO 所在的持久性文件夹中的 pom.xml。
<?xml version="1.0"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>ar.edu.itba.paw</groupId>
<artifactId>paw2018b</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>ar.edu.itba.paw</groupId>
<artifactId>interfaces</artifactId>
<version>1.0-SNAPSHOT</version>
<name>interfaces</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</dependency>
<dependency>
<groupId>ar.edu.itba.paw</groupId>
<artifactId>models</artifactId>
<version>${parent.version}</version>
</dependency>
</dependencies>
</project>
pom.xml 父包含:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.6.Final</version>
</dependency>
在 WebConfig.java 中我得到了这个:
@Autowired
@Bean(name = "fileUploadDao")
public FileUploadDao getUserDao(SessionFactory sessionFactory) {
return new FileUploadDAOImpl(sessionFactory);
}
@Bean(name = "multipartResolver")
public CommonsMultipartResolver getCommonsMultipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setMaxUploadSize(20971520); // 20MB
multipartResolver.setMaxInMemorySize(1048576); // 1MB
return multipartResolver;
}
我对spring/hibernate没有深入的了解。 我实际上是在关注这个:https://www.codejava.net/coding/upload-files-to-database-with-spring-mvc-and-hibernate
我正在使用 postgresql。
我应该显示的任何其他代码请告诉我。
【问题讨论】:
-
您的程序可以使用 Hibernate 库,但实际上并没有创建 Spring 用作 bean 的
SessionFactory对象。如果您刚开始,我强烈建议您使用 Spring Boot、Hibernate 的 JPA 接口和 Spring Data JPA(它会为您自动生成 DAO)。 -
@chrylis 我确实在我的 WebConfig.java 文件中使用了 SessionFactory 对象,我不知道这是否会改变一些东西。我按照上面的教程进行操作,它也没有创建 SessionFactory 对象。
-
在您显示的配置中,您的
@Bean方法说它需要SessionFactory,但您没有在任何地方显示您提供 一个SessionFactory。 (如果您不提供自己的,Spring Boot 会自动为您执行此操作。) -
@chrylis 好的,那么我在哪里可以看到我需要添加的依赖项?
标签: java spring hibernate maven spring-mvc