加载多个不同的hibernate.cfg.xml文件

解决方案 »

  1.   

    如果只是单独使用hibernate的话,做一个静态的HashMap,让HibernateSessionFactory分别加载不同的hibernate.cfg.xml得到多个session factory放入hashmap中。
    使用的时候就通过一个标识符获得对应的session factory来用就可以了。
    不过这种方式的问题是,很难实现对多个数据库的同一个事务操作。
    另外,如果想使用hibernate的延迟加载功能,必须要让你的sessionfactory使用本地线程变量ThreadLocal来实现,然后做一个Filter来关闭这些session。但如果使用了Spring来管理Hibernate,这些问题就很简单了,只要在Spring配置文件中定义多个hibernate session factory bean就能得到不同数据库的session。
    如果要对多个数据库进行同一个事务操作,就把spring提供的hibernate 事务管理器换成JTA事务管理器即可。
    至于延迟加载功能,只需要在web.xml加上一个spring提供的open session in view的过滤器即可。