2017-07-10 63 views
0

我能够获得像这样创建的sessionfactory bean。Spring Boot + Hibernate包含依赖关系jar中的hbm.xml

@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与classpath中的jar或上市hbm.xml文件仍产生not a managed type: class com.opensymphony.workflow.spi.hibernate.HibernateCurrentStep

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

我能够扫描与

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

hbm.xml文件,但随后使用会话工厂的交易变得No CurrentSessionContext configured!而基本春天回购方法仍然有效。

回答

0
@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; 
} 
相关问题