Spring 迁移Hibernate3配置-覆盖表映射
我必须将hibernate3-spring4配置迁移到hibernate5(或至少4)。关于“有人还在使用hibernate3吗?” 迁移涉及替换spring的AnnotationSessionFactoryBean,hibernate4/5不支持它。我尝试使用LocalSessionFactoryBean,但该类不允许指定自定义hibernate配置对象 我尝试实现的总体目标是基于表名动态设置数据库模式。架构名称不是固定的,仅在启动时解析 实现了使用一个sessionFactory读/写两个单独的模式,以便在写入两个模式时能够使用单个事务。如果有更好的替代方案来实现这一点,我欢迎其他想法 关于如何将以下代码迁移到hibernate4/5有什么想法吗Spring 迁移Hibernate3配置-覆盖表映射,spring,migration,hibernate-4.x,hibernate3,Spring,Migration,Hibernate 4.x,Hibernate3,我必须将hibernate3-spring4配置迁移到hibernate5(或至少4)。关于“有人还在使用hibernate3吗?” 迁移涉及替换spring的AnnotationSessionFactoryBean,hibernate4/5不支持它。我尝试使用LocalSessionFactoryBean,但该类不允许指定自定义hibernate配置对象 我尝试实现的总体目标是基于表名动态设置数据库模式。架构名称不是固定的,仅在启动时解析 实现了使用一个sessionFactory读/写两个单
@Bean
public AnnotationSessionFactoryBean sessionFactory() throws PropertyVetoException {
AnnotationSessionFactoryBean sessionFactory = new AnnotationSessionFactoryBean() {
@Override
protected org.hibernate.cfg.Configuration newConfiguration() throws HibernateException {
return new TableSchemaAddingConfig();
}
};
sessionFactory.setDataSource(dataSource);
...
return sessionFactory;
}
class TableSchemaAddingConfig extends org.hibernate.cfg.Configuration {
@Override
public Mappings createMappings() {
return new MappingsImpl() {
@Override
public Table addTable(String schema, String catalog, String name, String subselect, boolean isAbstract) {
schema = getSchema(name);
return super.addTable(schema, catalog, name, subselect, isAbstract);
}
@Override
public void addTableBinding(String schema, String catalog, String logicalName, String physicalName, Table denormalizedSuperTable) throws DuplicateMappingException {
schema = getSchema(physicalName);
super.addTableBinding(schema, catalog, logicalName, physicalName, denormalizedSuperTable);
}
};
}
private String getSchema(String name) {
if (StringUtils.startsWithIgnoreCase(name, "FOO_") ||
StringUtils.startsWithIgnoreCase(name, "BAR_")) {
return foo_schema; // value based on external configuration settings, not known at compile time
} else {
return bar_schema; // value based on external configuration settings, not known at compile time
}
}
}
你能做到这一点吗?