SessionFactory没有在spring boot 1.5.2中使用hibernate 5进行自动装配

时间:2017-08-04 22:05:59

标签: hibernate spring-boot

我在StackOverflow上已经关注了很多答案,但我仍然坚持这个问题。 我将Spring Boot Data JPA添加到遗留的primefaces项目中。 我在这里设置了许多线程中的配置。当我调试它时,我可以看到entityManagerFactory被正确注入,并且unwrap方法正确返回一个有效的会话工厂。 但是,在我自动连接会话工厂的其他类中,会话工厂为空,它没有被注入。我仔细检查了代码,并没有在其他任何地方设置此值。你们能发现可能发生的事吗?提前谢谢,

以下是相关代码:

BeanConfiguration:

@Configuration
public class BeanConfiguration {

@Autowired
private EntityManagerFactory entityManagerFactory;

@Bean
public SessionFactory getSessionFactory() {
    SessionFactory sessionFactory = entityManagerFactory.unwrap(SessionFactory.class);
    if (sessionFactory == null) {
        throw new NullPointerException("factory is not a hibernate factory");
   }
    return sessionFactory;
}
}

Spring Application:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public ServletRegistrationBean servletRegistrationBean() {
        FacesServlet servlet = new FacesServlet();
        return new ServletRegistrationBean(servlet, "*.xhtml");
    }
}

我想要注入它的类:

@Service
public class HibernateUtil<T, Type extends Serializable> implements IHibernateGenericoDAO<T, Serializable> {

    @Autowired
    private SessionFactory sessionFactory;

1 个答案:

答案 0 :(得分:0)

最后,我能够使用稍微不同的策略来解决它。 我没有注入会话工厂,而是注入了entitymanager:

@PersistenceContext protected EntityManager em;

然后在方法中使用它来创建标准:
Criteria cq = em.unwrap(Session.class).createCriteria(MyEntity.class);