Simultaneous use of Hibernate and Spring data jpa?

后端 未结 3 1920
孤独总比滥情好
孤独总比滥情好 2021-01-31 03:33

Is it possible to use Spring Data JPA (backed by Hibernate as JPA provider) and directly use Hibernate at the same time?

The problem is that when i use JpaTransactionMan

3条回答
  •  无人共我
    2021-01-31 04:01

    This is what I did, and it worked well: one data source, two transaction manager.
    Data source bean:

    
        
    
    

    For Hibernate XML based configuration:

    
        
        
        
            
                
            
        
    
    
    
        
    
    

    And for spring-data-jpa java based configuration:

    @Configuration
    @EnableJpaRepositories(basePackages = {"org.sharder.core.repository"}, 
    transactionManagerRef = "jpaTransactionManager")
    @EnableTransactionManagement
    public class JpaConfig {
    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(ComboPooledDataSource comboPooledDataSource) {
        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
        vendorAdapter.setDatabasePlatform("org.hibernate.dialect.MySQLDialect");
        factory.setJpaVendorAdapter(vendorAdapter);
        factory.setPackagesToScan("org.sharder.core.entity");
        factory.setDataSource(comboPooledDataSource);
        factory.setJpaProperties(getHibernateProperties());
        return factory;
    }
    
    @Bean(name = "jpaTransactionManager")
    public PlatformTransactionManager jpaTransactionManager(EntityManagerFactory entityManagerFactory) {
        JpaTransactionManager txManager = new JpaTransactionManager();
        txManager.setEntityManagerFactory(entityManagerFactory);
        return txManager;
    }
    
    private Properties getHibernateProperties() {
        Properties properties = new Properties();
        properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
        properties.setProperty("hibernate.cache.region.factory_class", "org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory");
        properties.setProperty("hibernate.cache.use_query_cache", "true");
        properties.setProperty("hibernate.cache.use_second_level_cache", "true");
        properties.setProperty("hibernate.cache.use_structured_entries", "true");
        properties.setProperty("hibernate.format_sql", "true");
        properties.setProperty("hibernate.show_sql", "true");
        properties.setProperty("hibernate.use_sql_comments", "true");
        properties.setProperty("hibernate.query.substitutions", "true 1, false 0");
        properties.setProperty("hibernate.jdbc.fetch_size", "20");
        properties.setProperty("hibernate.connection.autocommit", "false");
        properties.setProperty("hibernate.connection.release_mode", "auto");
        return properties;
    }
    

    }

    Notice that, transactionManagerRef = "jpaTransactionManager" set the JpaTransactionManager to be used with the repositories. Spring Data JPA namespace attributes

提交回复
热议问题