我在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;
答案 0 :(得分:0)
最后,我能够使用稍微不同的策略来解决它。 我没有注入会话工厂,而是注入了entitymanager:
@PersistenceContext
protected EntityManager em;
然后在方法中使用它来创建标准:
Criteria cq = em.unwrap(Session.class).createCriteria(MyEntity.class);