转载:hibernate+spring动态加载hibernate映射文件

来源:互联网 发布:学软件测试多少钱 编辑:程序博客网 时间:2024/04/29 15:44

转自:http://zyn010101.iteye.com/blog/1153270


在维护公司的项目的时候遇到一个需求,表结构需要改动,实体类也需要改动,但该项目已经做成产品了,该修改还不能影响已经上线使用的其他版本,也不可以修改其他版本的数据库,经过仔细考虑,决定采用动态加载hibernate映射文件的方式来实现。判断系统的版本配置,若为该版本,则加载a映射文件,将所需属性映射到数据库,否则加载b映射文件,加的属性只以附加属性的方式存在。 首先,将需要动态加载的hibernate映射文件从hibernate映射文件或者spring的org.springframework.orm.hibernate3.LocalSessionFactoryBean bean配置中去掉,重写一个类,

 

Java代码  收藏代码
  1. import java.io.File;  
  2. import java.net.URL;  
  3. import java.util.ArrayList;  
  4. import java.util.List;  
Java代码  收藏代码
  1. import org.apache.commons.logging.Log;  
  2. import org.apache.commons.logging.LogFactory;  
  3. import org.hibernate.HibernateException;  
  4. import org.hibernate.SessionFactory;  
  5. import org.hibernate.cfg.Configuration;  
  6. import org.springframework.orm.hibernate3.LocalSessionFactoryBean;  
Java代码  收藏代码
  1. public class SaasSessionFactoryBean extends LocalSessionFactoryBean {  
  2.     protected final Log log = LogFactory.getLog(getClass());  
  3.       
  4.     protected SessionFactory newSessionFactory(Configuration config) throws HibernateException  
  5.     {  
  6.         List<String> list = new ArrayList<String> ();  
  7.         if(ResourceUtil.getChinahrtCurrentVersion().equals(VersionConstant.SAAS))  
  8.         {  
  9.             list.add("HrtLogOnlineForSaas.hbm.xml");  
  10.             list.add("HrtCoursesTopForSaas.hbm.xml");  
  11.         }else{  
  12.             list.add("HrtLogOnline.hbm.xml");  
  13.             list.add("HrtCoursesTop.hbm.xml");  
  14.         }  
  15.         try{  
  16.             for(int i=0;i<list.size();i++){  
  17.                 URL url = HrtLogOnline.class.getResource(list.get(i));  
  18.                 File xmlFile = new File(url.toURI());  
  19.                 config.addFile(xmlFile);   
  20.                 System.out.println("动态添加映射文件"+xmlFile.toString());  
  21.             }  
  22.         }catch(Exception e)  
  23.         {  
  24.             e.printStackTrace();  
  25.         }  
  26.         log.info("构建sessionFactory...");  
  27.         return config.buildSessionFactory();  
  28.     }  

 spring中做如下配置:

SessionFactory  bean

Java代码  收藏代码
  1. <bean id="chartSessionFactory" class="com.elemice.chart.olap.SaasSessionFactoryBean">   
  2.   <property name="dataSource" ref="chartDataSource" />  
  3.   <property name="mappingLocations">  
  4.    <list>  
  5.             <!--  <value>classpath*:com/landray/kmss/hrt/chart/model/*.hbm.xml</value> -->  
  6.              <value>classpath:com/landray/kmss/hrt/chart/model/HrtPersonTrain.hbm.xml</value>  
  7.              <value>classpath:com/landray/kmss/hrt/chart/model/HrtPersonCourse.hbm.xml</value>  
  8.              <value>classpath:com/landray/kmss/hrt/chart/model/HrtPersonDetail.hbm.xml</value>  
  9.              <value>classpath:com/landray/kmss/hrt/chart/model/HrtOrgsPersons.hbm.xml</value>  
  10.              <value>classpath:com/landray/kmss/hrt/chart/model/HrtPersonsMsg.hbm.xml</value>  
  11.              <value>classpath:com/landray/kmss/hrt/chart/model/HrtCourseTrain.hbm.xml</value>  
  12.              <value>classpath:com/landray/kmss/hrt/chart/model/HrtChartLog.hbm.xml</value>  
  13.              <value>classpath:com/landray/kmss/hrt/chart/model/HrtTrainMainC.hbm.xml</value>  
  14.              <value>classpath:com/landray/kmss/hrt/chart/model/SysOrgElementC.hbm.xml</value>  
  15.              <value>classpath:com/landray/kmss/hrt/chart/model/HrtCustomVido.hbm.xml</value>  
  16.                
  17.                
  18.                
  19.        </list>  
  20.   </property>  
  21.   <property name="hibernateProperties">  
  22.    <props>  
  23.     <prop key="hibernate.dialect">${chartDB.hibernate.dialect}</prop>  
  24.     <prop key="hibernate.show_sql">${chartDB.hibernate.show_sql}</prop>  
  25.     <prop key="hibernate.format_sql">${chartDB.hibernate.format_sql}</prop>  
  26.     <prop key="hibernate.jdbc.fetch_size">${chartDB.hibernate.jdbc.fetch_size}</prop>  
  27.     <prop key="hibernate.jdbc.batch_size">${chartDB.hibernate.jdbc.batch_size}</prop>  
  28.     <prop key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop>  
  29.    </props>  
  30.   </property>  
  31.   <property name="lobHandler" ref="defaultLobHandler2"></property>  
  32.  </bean>  

 

启动tomcat服务器,可以看到hibernate映射文件已经动态加载了


0 0
原创粉丝点击