Spring @Autowired因Hibernate而失败

时间:2018-03-10 13:40:10

标签: java spring hibernate spring-boot spring-data-jpa

当我使用Hibernate时,我有一个像这样的配置类:

<?php

namespace AppBundle\Controller;

use Symfony\Component\HttpFoundation\Request;

class DetectServiceDetailController
{
    public $request;

    public function __construct(Request $request)
    {
        $this->request = $request;
        $serviceType = $this->request->query->get('type');
        return $serviceType;

    }

}

然后我想确保这个配置类工作正常,所以我写了一个单元测试,如下所示:

@Configuration
@ComponentScan
public class HibernateConfiguration {

    @Bean
    public LocalSessionFactoryBean sessionFactory() {
        return new LocalSessionFactoryBean();
    }
}

然后Intellij一直告诉我这条消息,它也没有编译失败所以它不是一个Intellij错误:

  

无法自动装配。找不到@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = HibernateConfiguration.class) public class HibernateConfigurationTest { @Autowired private LocalSessionFactoryBean localSessionFactoryBean; @Test public void someTest(){ } } 类型的bean。

我将LocalSessionFactoryBean更改为LocalSessionFactoryBean后,工作正常。

SessionFactory

以下是@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = HibernateConfiguration.class) public class HibernateConfigurationTest { @Autowired private SessionFactory localSessionFactoryBean; @Test public void someTest(){ } } 的源代码:

LocalSessionFactoryBean

以下是一些版本信息:

public class LocalSessionFactoryBean extends HibernateExceptionTranslator
    implements FactoryBean<SessionFactory>, ResourceLoaderAware, InitializingBean, DisposableBean {
}

那么为什么Spring在使用<properties> <springframework.version>4.0.6.RELEASE</springframework.version> <hibernate.version>4.3.6.Final</hibernate.version> <mysql.version>5.1.31</mysql.version> <joda-time.version>2.3</joda-time.version> <testng.version>6.9.4</testng.version> <mockito.version>1.10.19</mockito.version> <h2.version>1.4.187</h2.version> <dbunit.version>2.2</dbunit.version> </properties> 时无法自动发送?我认为我对Spring bean的类型推断有一些误解,因为在我看来下面的方法{{1在配置类中将注册一个类型为LocalSessionFactoryBean的bean,而不是@Bean,然后自动装配应该可以正常工作,但事实并非如此。任何人都可以给我一些学习材料吗?我试图搜索类似的东西,得到的结果很少。非常感谢!

1 个答案:

答案 0 :(得分:0)

您需要注入SqlSessionFactory而不是SessionFactory。