<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://www.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 | 譚軍
    主站蜘蛛池模板: 亚洲精品无码专区2| 亚洲人成网77777亚洲色| 亚洲精品无码高潮喷水在线| 亚洲理论片在线中文字幕| 国产午夜亚洲精品不卡免下载| 免费久久人人爽人人爽av| 午夜a级成人免费毛片| 亚洲国产精品无码久久久秋霞2| 中文字幕亚洲男人的天堂网络| 韩国免费a级作爱片无码| 欧美大尺寸SUV免费| 国产亚洲精品va在线| 亚洲AV无码成人精品区日韩 | 亚洲国产视频久久| 免费无码黄网站在线看| 国产美女无遮挡免费视频网站 | 一级毛片a免费播放王色电影 | 国产精品亚洲片在线va| 中文字幕在线免费视频| 天天看免费高清影视| 亚洲一区二区三区四区在线观看| 国产亚洲精品美女2020久久 | 亚洲日韩在线中文字幕第一页 | 中文字幕亚洲精品无码| 国产精品区免费视频| 亚洲高清国产拍精品青青草原| 亚洲国产成a人v在线| 日本在线免费观看| 亚洲精品无码永久在线观看 | 亚洲免费视频观看| 亚洲国产日韩在线视频| 国产亚洲精品欧洲在线观看| 国内精品乱码卡1卡2卡3免费| 亚洲av无码片在线播放| 一级一片免费视频播放| 日韩免费三级电影| 亚洲人成网站色在线观看| 最近免费中文字幕大全高清大全1| 亚洲免费观看视频| 一区二区三区免费视频观看| 真实乱视频国产免费观看|