<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    zhyiwww
    用平實的筆,記錄編程路上的點點滴滴………
    posts - 536,comments - 394,trackbacks - 0
    如果你在調用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://m.tkk7.com/zhyiwww   
    |----------------------------------------------------------------------------------------|
    posted on 2008-12-24 18:24 zhyiwww 閱讀(3833) 評論(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 | 譚軍
    主站蜘蛛池模板: 国产精品亚洲二区在线| 亚洲国产成a人v在线| 国产大陆亚洲精品国产| 免费国产不卡午夜福在线| 337P日本欧洲亚洲大胆艺术图| 在线观看人成网站深夜免费| 亚洲熟妇久久精品| 国产成人免费片在线视频观看| 美女又黄又免费的视频| 免费人成无码大片在线观看| 免费国产va视频永久在线观看| 亚洲精品一级无码鲁丝片| 国产福利免费视频| 亚洲AV成人精品网站在线播放| 午夜老司机永久免费看片| 亚洲国产精品久久人人爱| 欧美最猛性xxxxx免费| 亚洲国产精品18久久久久久| 亚洲AⅤ永久无码精品AA| 中文字幕久无码免费久久| 亚洲成人激情在线| 18禁成年无码免费网站无遮挡| 亚洲一久久久久久久久| 亚洲精品国产自在久久| 免费成人在线电影| 亚洲资源最新版在线观看| 国产一区二区免费在线| 国产啪精品视频网站免费尤物| 亚洲成在人线中文字幕| 免费v片在线观看品善网| 久久国产精品2020免费m3u8| 亚洲国产视频久久| 亚洲一区二区三区在线观看精品中文 | 日韩精品极品视频在线观看免费| 亚洲日本乱码一区二区在线二产线 | 免费羞羞视频网站| 三年片免费高清版| 中文文字幕文字幕亚洲色| 亚洲国产主播精品极品网红| 最近2019免费中文字幕6| 最新亚洲人成网站在线观看|