Spring-boot – 将hibernate映射文件添加到实体管理器

我正在将遗留应用程序迁移到Spring-boot,并且必须集成一个名为hibernate的查询映射文件(之前在persitence.xml文件中配置)。

我已经提出了一个解决方案

... @Autowired private DataSource dataSource; @Bean public LocalSessionFactoryBean sessionFactory() { LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean(); sessionFactoryBean.setDataSource(dataSource); //... sessionFactoryBean.setMappingResources("META-INF/named-queries.hbm.xml"); return sessionFactoryBean; } 

但我结束了在我的应用程序中有一个entityManager bean和一个sessionFactory bean!

根据你这是一个很好的解决方案吗? 有没有办法在不使用sessionFactory bean的情况下以某种方式将hibernate映射文件(named-query.hbm.xml)添加到entityManager?

在此先感谢您的建议

**编辑**来自JB Nizet的建议,也提出了另一种解决方案

 @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory() { LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean(); entityManagerFactory.setDataSource(dataSource); // ... entityManagerFactory.setMappingResources("META-INF/named-queries.hbm.xml"); return entityManagerFactory; } 

在我的DAO / Service中,我仍然可以通过以下方式获得hibernate会话:

 private Session getSession() { //return this.sessionFactory.getCurrentSession(); return this.entityManager.unwrap(Session.class); } 

但如果有人知道我们是否可以使用带有属性的spring-boot auto-config做同样的事情,那么欢迎!

 @Autowired private ResourceLoader rl; @Bean public LocalSessionFactoryBean sessionFactory() throws IOException { LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean(); sessionFactoryBean.setMappingLocations(loadResources()); } public Resource[] loadResources() { Resource[] resources = null; try { resources = ResourcePatternUtils.getResourcePatternResolver(rl) .getResources("classpath:/hibernate/*.hbm.xml"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return resources; }