有几种可能性。
注意,Hibernate对SessionFactory
是建设它,SessionFactoryBean
构建SessionFactory
在afterPropertiesSet
方法,以便设置要必须通过一些BeanFactoryPostProcessor
编辑要做的SessionFactoryBean
工作后inmutable
在阅读您的评论之后,我认为您可以声明一个EntityClassHolder
bean并使用Autowire收集工具来获取所有实体在EntityClassFactoryBean
临时你可以注射一个SessionFactoryBean
。但我不知道这是你想做的事:
public class EntityClassHolder {
List<Class<?>> entityClasses;
public List<Class<?>> getEntityClasses() {
return entityClasses;
}
public void setEntityClasses(List<Class<?>> entityClasses) {
this.entityClasses = entityClasses;
}
}
public class EntityClassFactoryBean extends AbstractFactoryBean<List<Class<?>>> {
@Autowired
List<EntityClassHolder> list;
@Override
public Class<?> getObjectType() {
return List.class;
}
@Override
protected List<Class<?>> createInstance() throws Exception {
ArrayList<Class<?>> classList = new ArrayList<Class<?>>();
for (EntityClassHolder ech : list) {
classList.addAll(ech.getEntityClasses());
}
return classList;
}
}
现在,如果你有几个applicatonContext-xxx.xml例如SessionFactory
将与EntityClassHolder
豆definied实体类进行配置,当你加载其中一个。
感谢何塞的投入。我能够通过父母扩展机制来实现SessionFactory扩展。但是,这会创建多个会话工厂。我可以使用相同的sessionfactory吗?以及如何添加额外的实体bean引用?我不确定多个会话工厂是否会导致问题。 –
这个想法是加载一个SessionFactory,通过配置选择其中的哪一个。 –
但是,我有几个独立的模块,必须动态加载。要加载的模块本身就是一个运行时配置。我需要减少创建的会话工厂总数,以便系统的整体性能不会下降。另外,是否有可能将我链接到一些关于如何通过引用Hibernate Bean包含实现PropertySource的示例?我找不到任何东西 –