Spring MVC: не найден подходящий компонент типа [org.hibernate.SessionFactory] для зависимости - PullRequest
0 голосов
/ 23 сентября 2018

Я получаю очень длинное вложенное исключение, последнее из которых:

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);
    }
}

Вот мой 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;
    }

У меня нет глубокого пониманиявесны / зимней спячкиНа самом деле я следовал этому: https://www.codejava.net/coding/upload-files-to-database-with-spring-mvc-and-hibernate

Я использую postgresql.

Любой другой код, который я должен показать, пожалуйста, сообщите мне.

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Добавьте следующие зависимости в pom,

(Assuming you're using mysql)
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version><!--version--></version>
   <scope>runtime</scope>
</dependency>

и правильный пул соединений,

<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-dbcp</artifactId>
    <version>7.0.55</version>
</dependency>

Поскольку вы используете конфигурацию java, попробуйте определить SessionFactory как @Bean.

@Bean
public LocalSessionFactoryBean sessionFactory() {
   LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
   sessionFactory.setDataSource(restDataSource());
   sessionFactory.setPackagesToScan(
       new String[] { "base.package.to.scan" }
   );
   sessionFactory.setHibernateProperties(hibernateProperties());

   return sessionFactory;
}

@Bean
public DataSource restDataSource() {
    BasicDataSource dataSource = new BasicDataSource();
    dataSource.setDriverClassName("drivr");
    dataSource.setUrl("url"));
    dataSource.setUsername("uname");
    dataSource.setPassword("passwd");
    return dataSource;
}

Properties hibernateProperties() {
    return new Properties() {
        {
            setProperty("hibernate.hbm2ddl.auto", create);
            setProperty("hibernate.dialect", dielect_to_use);
        }
    };
}

Вам также может понадобиться менеджер транзакций,

@Bean
@Autowired
public HibernateTransactionManager transactionManager(
    SessionFactory sessionFactory) {
    HibernateTransactionManager txManager = new HibernateTransactionManager();
    txManager.setSessionFactory(sessionFactory());
    return txManager;
}

Надеюсь, это поможет.

0 голосов
/ 23 сентября 2018

Попробуйте добавить компонент sessionFactory, вы можете посмотреть пример ниже.(dataSoure используется с поддержкой oracle jdbc)

<bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource"
        destroy-method="close">
        <property name="URL" value="jdbc:oracle:thin:@ip:port:sid" />
        <property name="user" value="name" />
        <property name="password" value="password" />
        <property name="connectionCachingEnabled" value="true" />
        <property name="connectionCacheProperties">
            <props merge="default">
                <prop key="InitialLimit">7</prop>
                <prop key="MinLimit">3</prop>
                <prop key="MaxLimit">100</prop>
            </props>
        </property>
    </bean>

<bean
        id="sessionFactory"
        class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="packagesToScan">
            <list>
                <value>your.package</value>
            </list>
        </property>
        <property
            name="dataSource"
            ref="dataSource" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
                <prop key="hibernate.show_sql">false</prop>
                <!-- <prop key="hibernate.hbm2ddl.auto">update</prop> -->
            </props>
        </property>
    </bean>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...