<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 閱讀(3835) 評論(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 | 譚軍
    主站蜘蛛池模板: 亚洲伊人久久大香线焦| 亚洲国产成人高清在线观看| 亚洲永久在线观看| 国产精品视频免费| 亚洲人成依人成综合网| 三年片在线观看免费大全电影| 亚洲成AV人片在WWW色猫咪| 久久久精品免费国产四虎| 久久亚洲精品成人| 最近2019免费中文字幕视频三| 亚洲综合精品香蕉久久网97| 日本免费一区二区久久人人澡| 亚洲国产精品婷婷久久| 精品国产免费一区二区三区香蕉| 亚洲av无码不卡一区二区三区| 毛片在线播放免费观看| 91亚洲va在线天线va天堂va国产| 91九色视频无限观看免费| 亚洲一区中文字幕| 精品免费久久久久久成人影院| 黄人成a动漫片免费网站| 国产a v无码专区亚洲av| a级毛片毛片免费观看久潮 | 亚洲狠狠成人综合网| 性感美女视频免费网站午夜| 亚洲国产精品美女久久久久| mm1313亚洲国产精品美女| 久久最新免费视频| 亚洲最大黄色网址| 日韩一区二区三区免费体验| 国产精品免费αv视频| 亚洲国产精品午夜电影| 永久黄网站色视频免费观看| 国产免费一级高清淫曰本片| 亚洲综合一区二区国产精品| 在线观看免费精品国产| 97在线免费视频| 成人区精品一区二区不卡亚洲| 亚洲天堂免费在线视频| 国产国产人免费视频成69堂| 黄色a三级免费看|