无法在ApplicationListener中注入Hibernate SessionFactory

时间:2016-02-09 20:12:06

标签: java spring hibernate blob

我正在构建一个SpringBoot应用程序,我正在尝试以编程方式填充我的测试数据库。

我想出了这个:

@Profile("dev")
@Component
public class DatabaseFillerOnStartup implements ApplicationListener<ContextRefreshedEvent> {

@Resource
private SomeRepository someRepository;

@Resource //This doesn't work
private SessionFactory sessionFactory;

@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
    ...

我的一个实体有一个Blob,我想要保存图像:

   private Blob createBlobWithSampleImage() {
    InputStream imageStream = this.getClass().getClassLoader().getResourceAsStream("sample1.jpg");
    LobCreator lobCreator = Hibernate.getLobCreator(sessionFactory.getCurrentSession());
    try {
        return lobCreator.createBlob(IOUtils.toByteArray(imageStream));
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

问题是我无法注入sessionFactory。

  

引起:org.springframework.beans.factory.NoSuchBeanDefinitionException

有没有更好的方法来实现我想要的目标?

1 个答案:

答案 0 :(得分:1)

您未显示您已配置会话工厂的位置。您使用的是spring-boot-starter-data-jpa,还是您自己在@Configuration注释类中或通过标准的xml bean配置连接SessionFactory?

编辑: 根据该答案,请查看this stackoverflow answer