【问题标题】:Spring Boot + Hibernate include hbm.xml from dependency jarSpring Boot + Hibernate 包含依赖 jar 中的 hbm.xml
【发布时间】:2017-07-10 17:21:55
【问题描述】:

我可以像这样创建一个 sessionfactory bean。

@Configuration
public class HibernateConfig {

    private EntityManagerFactory emf;

    @Bean
    public HibernateJpaSessionFactoryBean sessionFactory() {
        HibernateJpaSessionFactoryBean fact = new HibernateJpaSessionFactoryBean();
        fact.setEntityManagerFactory(emf);
        return fact;
    }  

    @Autowired
    public HibernateConfig(EntityManagerFactory emf) {
        this.emf = emf;
    }

}

但使用 @ImportResource@EntityScan 与 jar 的类路径或列出 hbm.xml 文件仍然会产生 not a managed type: class com.opensymphony.workflow.spi.hibernate.HibernateCurrentStep

我看到一些答案,您使用不同的类来生成 sessionFactory bean。有没有一种简单的方法来获取包含在实体管理器创建中的映射文件?

我能够使用

扫描 hbm.xml 文件
 @Bean 
 public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) {
     LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
     em.setDataSource(dataSource);
     em.setPackagesToScan("com.foo.bar.domain");

     em.setMappingResources("classpath:x/HibernateCurrentStep.hbm.xml",
    "classpath:x/HibernateHistoryStep.hbm.xml",
    "classpath:x/HibernateWorkflowEntry.hbm.xml");

    HibernateJpaVendorAdapter vendor = new HibernateJpaVendorAdapter();
    vendor.setShowSql(false);
    em.setJpaVendorAdapter(vendor);
    return em;
}

但是任何使用会话工厂的事务都会得到No CurrentSessionContext configured!,而基本的spring repo方法仍然有效。

【问题讨论】:

    标签: hibernate spring-boot


    【解决方案1】:
    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) {
      LocalContainerEntityManagerFactoryBean em = new 
      LocalContainerEntityManagerFactoryBean();
      em.setDataSource(dataSource);
      em.setPackagesToScan("com.foo.bar.domain");
    
      em.setMappingResources("com/opensymphony/workflow/spi/hibernate3/HibernateCurrentStep.hbm.xml",
         "com/opensymphony/workflow/spi/hibernate3/HibernateHistoryStep.hbm.xml",
         "com/opensymphony/workflow/spi/hibernate3/HibernateWorkflowEntry.hbm.xml"); 
      //these needed to be added to have all hibernate config done in one place. 
     em.getJpaPropertyMap().put(AvailableSettings.CURRENT_SESSION_CONTEXT_CLASS, 
          SpringSessionContext.class.getName());
     em.getJpaPropertyMap().put(AvailableSettings.DIALECT,
          PostgreSQL9Dialect.class.getName());
    
      HibernateJpaVendorAdapter vendor = new HibernateJpaVendorAdapter();
      vendor.setShowSql(false);
      em.setJpaVendorAdapter(vendor);
      return em;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      • 2018-03-31
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      相关资源
      最近更新 更多