快速业务通道

在Hibernate中动态切换Schema - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-25

在Hibernate中动态切换Schema

时间:2009-10-14

如果你在调用hibernate的时候需要切换scheme怎么办呢。

在oracle中,不同的用户,使用不同的schema.在hibernate的POJO中,会指定了schema

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!--   Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping>   <class name="com.csc.poimanager.dao.Poi" table="POI" schema="P_BEIJING">     <id name="poiId" type="java.lang.Long">       <column name="POI_ID" precision="10" scale="0" />       <generator class="increment" />     </id>     <property name="cnName" type="java.lang.String">       <column name="CN_NAME" length="1000" />     </property>   </class> </hibernate-mapping>

上面的代码部分,就指定了Schema.如果在操作的时候想切换Schema.操作如下:

默认的配置<property name="hibernate.default_schema">POI_BEIJING</property>

上面的映射文件改为:

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!--   Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping>   <class name="com.csc.poimanager.dao.Poi" table="POI" >     <id name="poiId" type="java.lang.Long">       <column name="POI_ID" precision="10" scale="0" />       <generator class="increment" />     </id>     <property name="cnName" type="java.lang.String">       <column name="CN_NAME" length="1000" />     </property>   </class> </hibernate-mapping>

在操作的,可以用下面的方法来重新build你的SessionFactory

  public static void rebuildSessionFactoryForChangeSchema(String newSchema){     try {   Properties p = configuration.getProperties();       System.out.println("---" + p);       p.put("hibernate.default_schema", newSchema);       sessionFactory = configuration.buildSessionFactory();       System.out.println(" change schema successfully ......... ");     } catch (Exception e) {       System.err           .println("%%%% rebuild session factory failed for changing schema %%%%");       e.printStackTrace();     }   }

如果需要改变Schema,就需要在需要的时候调用此方法

比如在SchemaAction中

   HibernateSessionFactory.rebuildSessionFactoryForChangeSchema("POI_SHANGHAI");   System.out.println(" change successfully ---");   PoiDAO pd = new PoiDAO();     Transaction t =pd.getSession().beginTransaction();   pd.save(new Poi("jsfjksdf"));     t.commit();

那么,原来,是向POI_BEIJING中插入数据的,变成了向POI_SHANGHAI中插入一条数据了。

通过这种方法,可以实现在操作不同的Schema的时候实现切换。

问题:此处改变的是静态工厂。所以,会对所有的用户产生影响。如果不想对所有的用户改变,那么可以根据Schema的名称来取得自己对应的SessionFactoy就可以了。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号