在我的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方言?是否可以通过编程方式进行?
由于
答案 0 :(得分:0)
我认为要实现这一点,您将需要多个数据源配置文件,并且每个数据库在DAO中都有自己的SessionFactory对象,这将对数据库操作进行操作。
例如:
SessionFactory sessionFactory1 = new Configuration().configure("oracleconfig.cfg.xml").buildSessionFactory();
SessionFactory sessionFactory2 = new Configuration().configure("mysqlconfig.cfg.xml").buildSessionFactory();