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

时间:2015-09-12 07:07:13

标签: java hibernate jpa spring-boot

我将遗留应用程序迁移到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中,我仍然可以通过以下方式获得休眠会话:

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

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

2 个答案:

答案 0 :(得分:0)

@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;
}

答案 1 :(得分:0)

将* .hbm.xml文件放在src / main / resources文件夹下,Spring Boot可以自动扫描它们。

如果要在application.properties文件中指定位置,请将其定义为spring.jpa.mapping-resources属性。

src/main/resources/hibernate : Store all the *.hbm.xml files
src/main/resources/application.properties : define the spring boot properties

在SpringBoot 2.1.3中进行了测试,以下是文件夹结构

@Repository
@Transactional
public class XxxDao {
    @Autowired
    private EntityManager entityManager;

    private Session getSession() {
        return entityManager.unwrap(Session.class);
    }
...
}

如果您想在Dao类中获得休眠会话,请按以下方式定义它们:

{{1}}