AbstractRoutingDatasource和带有多个数据源的hibernate.dialect

时间:2014-01-15 15:38:35

标签: spring hibernate jpa spring-data

在我的Spring Java Config文件中,我成功使用 AbstractRoutingDatasource 来切换多个数据库连接。

public MyRoutingDataSource myRoutingDataSource() {
    MyRoutingDataSource dataSource = new MyRoutingDataSource();
    Map<Object, Object> targetDataSources = new HashMap<Object, Object>();
    dataSource.setDefaultTargetDataSource(defaultDataSource());
    dataSource.setTargetDataSources(targetDataSources);
    return dataSource;
}

但是当我想要特定的SQL请求与数据源PostgreSQL / Oracle等不同时(比如分页限制/ rowNums),我必须关联一个特定的 hibernate dialect

    HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
    vendorAdapter.setGenerateDdl(false);
    vendorAdapter.setShowSql(true);
    vendorAdapter.setDatabasePlatform("org.hibernate.dialect.PostgreSQL81Dialect");

    LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
    factory.setJpaVendorAdapter(vendorAdapter);
    factory.setPackagesToScan("fr.appli.model");
    factory.setDataSource(myRoutingDataSource());

我的问题是当我从AbstractRoutingDatasource更改数据源时,如何在我的EntityManager中更改hibernate方言?是否可以通过编程方式进行?

由于

1 个答案:

答案 0 :(得分:0)

我认为要实现这一点,您将需要多个数据源配置文件,并且每个数据库在DAO中都有自己的SessionFactory对象,这将对数据库操作进行操作。

例如:

SessionFactory sessionFactory1 = new  Configuration().configure("oracleconfig.cfg.xml").buildSessionFactory();

SessionFactory sessionFactory2 = new Configuration().configure("mysqlconfig.cfg.xml").buildSessionFactory();