<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中插入數(shù)據(jù)的,變成了向POI_SHANGHAI中插入一條數(shù)據(jù)了。
    ?
    通過這種方法,可以實現(xiàn)在操作不同的Schema的時候實現(xiàn)切換。

    問題:
    ? 此處改變的是靜態(tài)工廠。所以,會對所有的用戶產生影響。如果不想對所有的用戶改變,那么可以根據(jù)Schema的名稱來取得自己對應的SessionFactoy就可以了。





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

    FeedBack:
    # re: 在hibernate中動態(tài)切換Schema
    2008-12-25 08:39 | 一臉大鼻涕
    重新構建SessionFactoy的消耗會不會太大了?  回復  更多評論
      
    # re: 在hibernate中動態(tài)切換Schema
    2008-12-25 10:32 | zhyiwww
    我現(xiàn)在也不知道,僅能從功能上去實現(xiàn)項目的需求。  回復  更多評論
      
    # re: 在hibernate中動態(tài)切換Schema
    2008-12-25 10:33 | zhyiwww
    不過,我想,可以,根據(jù)不同的schema把SessionFactory放在map里面,這樣在用戶切換和訪問的時候能提高一些性能。  回復  更多評論
      
    # re: 在hibernate中動態(tài)切換Schema
    2009-08-13 22:23 | Gorden
    不知道在實際項目中有遇到切換用戶的可能沒?  回復  更多評論
      
    # re: 在hibernate中動態(tài)切換Schema
    2011-09-15 11:47 | 譚軍
    主站蜘蛛池模板: 亚洲中文字幕无码久久综合网| 麻豆国产VA免费精品高清在线 | 亚洲人成在线播放网站岛国| 成人自慰女黄网站免费大全| 亚洲日本中文字幕一区二区三区| 午夜亚洲国产精品福利| 亚洲 自拍 另类小说综合图区| 国产成人亚洲综合a∨| 亚洲av无码国产精品色在线看不卡| 国产亚洲综合一区二区三区| 免费人成网站在线播放| 国产无遮挡色视频免费观看性色| 亚洲精品无码mv在线观看网站 | 在线观看无码的免费网站| 亚洲精品无码成人片久久不卡| 日本免费人成黄页在线观看视频 | 久久精品国产亚洲av成人| 久久99精品国产免费观看| 一级特级aaaa毛片免费观看| 亚洲午夜激情视频| 成人A片产无码免费视频在线观看| 老司机永久免费网站在线观看| 亚洲av日韩综合一区二区三区| 亚洲第一页综合图片自拍| 不卡视频免费在线观看| 亚洲精品综合久久中文字幕| 青青草国产免费久久久下载| 又粗又长又爽又长黄免费视频 | 亚洲乱码一二三四区国产| 美女黄网站人色视频免费国产 | 国产在线观看麻豆91精品免费 | 欧洲亚洲综合一区二区三区| 色噜噜AV亚洲色一区二区| 国产电影午夜成年免费视频| 亚洲av无码专区国产不乱码| 中文字幕在线亚洲精品 | 亚洲av色福利天堂| 看全色黄大色大片免费久久| 三年片免费高清版 | 久香草视频在线观看免费| 亚洲永久中文字幕在线|