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

标签 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/服务中,我仍然可以通过以下方式获得 hibernate session :

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

但是如果现在有人知道我们是否可以使用带属性的 spring-boot 自动配置来做同样的事情,欢迎!

最佳答案

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

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

spring.jpa.mapping-resources=hibernate/MyMapping.hbm.xml,hibernate/MyMapping2.hbm.xml

在SpringBoot 2.1.3中测试,文件夹结构如下

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

如果您想在 Dao 类中获取 hibernate session ,请按如下方式定义它们:

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

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

关于java - spring-boot - 将 hibernate 映射文件添加到实体管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32536200/

相关文章:

java - 如何在 TaskExecutionAutoConfiguration 旁边创建额外的 TaskExecutor?

java - 在不知道键的情况下检查哈希表是否包含值?

java - 从同一个文件java读取字符串和字节

java - 需要找不到类型为 'org.hibernate.SessionFactory' 的 bean

java - Spring数据延迟加载不起作用

java - Windows 和 Linux 加载 ttf 字体时 JLabel 的差异

java - 尝试保存 Iterable 时执行独立工作时出错

java - 服务器端推送技术-数据库更改后

java - 外键作为主键注释

java - JPA:具有复合主键的持久实体