zhyiwww
          用平實的筆,記錄編程路上的點點滴滴………
          posts - 536,comments - 394,trackbacks - 0
          <2008年12月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          -------------------------------------------
          崇尚原創精神,
          文章歡迎轉載,
          請您注明出處,
          在此特別聲明。
          版權所有@zhyiwww
          引用鏈接
          http://www.aygfsteel.com/zhyiwww

          --------------------------------------------

          常用鏈接

          留言簿(33)

          隨筆分類(626)

          朋友的博客

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 1560997
          • 排名 - 11

          最新評論

          閱讀排行榜

          評論排行榜

          如果你在調用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就可以了。





          |----------------------------------------------------------------------------------------|
                                     版權聲明  版權所有 @zhyiwww
                      引用請注明來源 http://www.aygfsteel.com/zhyiwww   
          |----------------------------------------------------------------------------------------|
          posted on 2008-12-24 18:24 zhyiwww 閱讀(3848) 評論(5)  編輯  收藏 所屬分類: j2eedatabase

          FeedBack:
          # re: 在hibernate中動態切換Schema
          2008-12-25 08:39 | 一臉大鼻涕
          重新構建SessionFactoy的消耗會不會太大了?  回復  更多評論
            
          # re: 在hibernate中動態切換Schema
          2008-12-25 10:32 | zhyiwww
          我現在也不知道,僅能從功能上去實現項目的需求。  回復  更多評論
            
          # re: 在hibernate中動態切換Schema
          2008-12-25 10:33 | zhyiwww
          不過,我想,可以,根據不同的schema把SessionFactory放在map里面,這樣在用戶切換和訪問的時候能提高一些性能。  回復  更多評論
            
          # re: 在hibernate中動態切換Schema
          2009-08-13 22:23 | Gorden
          不知道在實際項目中有遇到切換用戶的可能沒?  回復  更多評論
            
          # re: 在hibernate中動態切換Schema
          2011-09-15 11:47 | 譚軍
          主站蜘蛛池模板: 长岛县| 平安县| 精河县| 陆丰市| 清涧县| 临朐县| 兰西县| 天门市| 开远市| 寿阳县| 武穴市| 富顺县| 巴楚县| 甘谷县| 乌鲁木齐市| 托克托县| 本溪市| 济阳县| 闸北区| 库伦旗| 台湾省| 镇雄县| 岱山县| 新乐市| 紫金县| 屯门区| 醴陵市| 永年县| 永顺县| 旅游| 上犹县| 黎城县| 健康| 古田县| 疏附县| 平陆县| 吕梁市| 滨海县| 大冶市| 普兰县| 尖扎县|