<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
    如果你在調(diào)用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,就需要在需要的時候調(diào)用此方法

    比如在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的時候?qū)崿F(xiàn)切換。

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





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

    FeedBack:
    # re: 在hibernate中動態(tài)切換Schema
    2008-12-25 08:39 | 一臉大鼻涕
    重新構(gòu)建SessionFactoy的消耗會不會太大了?  回復(fù)  更多評論
      
    # re: 在hibernate中動態(tài)切換Schema
    2008-12-25 10:32 | zhyiwww
    我現(xiàn)在也不知道,僅能從功能上去實現(xiàn)項目的需求。  回復(fù)  更多評論
      
    # re: 在hibernate中動態(tài)切換Schema
    2008-12-25 10:33 | zhyiwww
    不過,我想,可以,根據(jù)不同的schema把SessionFactory放在map里面,這樣在用戶切換和訪問的時候能提高一些性能。  回復(fù)  更多評論
      
    # re: 在hibernate中動態(tài)切換Schema
    2009-08-13 22:23 | Gorden
    不知道在實際項目中有遇到切換用戶的可能沒?  回復(fù)  更多評論
      
    # re: 在hibernate中動態(tài)切換Schema
    2011-09-15 11:47 | 譚軍
    主站蜘蛛池模板: 四虎国产精品免费久久影院| 久久综合亚洲色一区二区三区| 2022久久国产精品免费热麻豆| 四虎国产精品永免费| 亚洲AV综合色区无码二区偷拍 | 亚洲国产成人久久综合一区77| 最近免费中文字幕大全高清大全1| 男人都懂www深夜免费网站| 日本亚洲视频在线| 亚洲日韩精品无码专区加勒比☆| 三年片在线观看免费观看大全中国| 91高清免费国产自产拍2021| 又黄又爽的视频免费看| 亚洲国产香蕉碰碰人人| 久久久WWW成人免费精品| 一二三四在线播放免费观看中文版视频 | 亚洲成亚洲乱码一二三四区软件| 成人毛片免费观看视频在线| 5555在线播放免费播放| 全黄大全大色全免费大片| 特黄特色的大片观看免费视频| 久久亚洲色WWW成人欧美| 亚洲日本va一区二区三区| 亚洲w码欧洲s码免费| 亚洲春色在线观看| 99亚洲精品高清一二区| 亚洲好看的理论片电影| 久久久久久亚洲精品| 久久亚洲国产伦理| 亚洲精品福利视频| 亚洲人成网站在线播放影院在线| 久久99国产亚洲高清观看首页| 亚洲综合日韩久久成人AV| 亚洲色无码专区在线观看| 亚洲αv在线精品糸列| 亚洲成av人片在线观看无码不卡| 亚洲人精品午夜射精日韩 | 一个人看的免费视频www在线高清动漫 | 国产精品久久久久久亚洲小说| 中日韩亚洲人成无码网站| 亚洲色偷偷偷综合网|