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

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

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

    J2EE劍俠行

    直覺我的J2EE應用生涯,打造我心中的一把利劍。

    常用鏈接

    統計

    技術鏈接

    最新評論

    hibernate的延遲加載通用方法

    呵呵,在忙一個項目,潛水很久,現在冒個泡:
    (本文適用在struts+spring+hibernate3上做開發的蟲蟲們)
    類名:HibernateUtil

    package?com.antbee.j2eemodel.util;

    import?java.lang.reflect.InvocationTargetException;
    import?java.lang.reflect.Method;
    import?java.util.Collection;
    import?java.util.Iterator;

    import?org.springframework.orm.hibernate3.support.HibernateDaoSupport;

    public?class?HibernateUtil?extends?HibernateDaoSupport?{

    /**
    *?初始化POJO類
    *?
    @author?@家軍
    *?
    @param?object?POJO對象
    *?
    @param?methodName?方法名稱
    *?
    @return
    *?
    @version?1.0
    */
    public?void?initialize(Object?object,?String?methodName)?throws?SecurityException,?NoSuchMethodException,?IllegalArgumentException,?IllegalAccessException,?InvocationTargetException?{

    String[]?methodArray?
    =?methodName.split("\\.");
    Method?method?
    =?null;
    Object?initializeObject?
    =?object;

    if(methodArray.length?==?1){
    this.getHibernateTemplate().lock(initializeObject,?org.hibernate.LockMode.NONE);
    method?
    =?object.getClass().getMethod(methodArray[0],?new?Class[]?{});
    initializeObject?
    =?method.invoke(initializeObject,?new?Object[]?{});
    this.getHibernateTemplate().initialize(initializeObject);
    }
    else{
    for(int?i=0;i<methodArray.length;i++){
    method?
    =?initializeObject.getClass().getMethod(methodArray[i],?new?Class[]?{});
    initializeObject?
    =?method.invoke(initializeObject,?new?Object[]?{});
    }
    this.getHibernateTemplate().lock(initializeObject,?org.hibernate.LockMode.NONE);
    this.getHibernateTemplate().initialize(initializeObject);
    }
    }

    /**
    *?初始化POJO類
    *?
    @author?@家軍
    *?
    @param?object?POJO對象
    *?
    @param?methodName?方法名稱數組
    *?
    @return
    *?
    @version?1.0
    */
    public?void?initialize(Object?object,?String?methodName[])
    throws?SecurityException,?NoSuchMethodException,
    IllegalArgumentException,?IllegalAccessException,?InvocationTargetException?{

    for?(int?i?=?0;?i?<?methodName.length;?i++)?{
    String[]?methodArray?
    =?methodName[i].split("\\.");
    Method?method?
    =?null;
    Object?initializeObject?
    =?object;

    if(methodArray.length?==?1){
    this.getHibernateTemplate().lock(initializeObject,?org.hibernate.LockMode.NONE);
    method?
    =?object.getClass().getMethod(methodArray[0],?new?Class[]?{});
    initializeObject?
    =?method.invoke(initializeObject,?new?Object[]?{});
    this.getHibernateTemplate().initialize(initializeObject);
    }
    else{
    for(int?j=0;j<methodArray.length;j++){
    method?
    =?initializeObject.getClass().getMethod(methodArray[j],?new?Class[]?{});
    initializeObject?
    =?method.invoke(initializeObject,?new?Object[]?{});
    }
    this.getHibernateTemplate().lock(initializeObject,?org.hibernate.LockMode.NONE);
    this.getHibernateTemplate().initialize(initializeObject);
    }
    }

    }

    /**
    *?初始化POJO類
    *?
    @author?@家軍
    *?
    @param?object?POJO對象
    *?
    @return
    *?
    @version?1.0
    */
    public?void?initialize(Object?object)?throws?SecurityException,?NoSuchMethodException,?IllegalArgumentException,?IllegalAccessException,?InvocationTargetException?{
    this.getHibernateTemplate().lock(object,?org.hibernate.LockMode.NONE);
    this.getHibernateTemplate().initialize(object);
    }

    /**
    *?初始化POJO類
    *?
    @author?@家軍
    *?
    @param?collection?POJO對象集合
    *?
    @param?methodName?方法名稱數組
    *?
    @return
    *?
    @version?1.0
    */
    public?void?initialize(Collection?collection,?String?methodName[])
    throws?SecurityException,?NoSuchMethodException,
    IllegalArgumentException,?IllegalAccessException,?InvocationTargetException?{

    for(Iterator?i=collection.iterator();i.hasNext()Wink{
    Object?object?
    =?i.next();
    this.initialize(object,methodName);
    }
    }

    /**
    *?初始化POJO類
    *?
    @author?@家軍
    *?
    @param?collection?POJO對象集合
    *?
    @param?methodName?方法名稱
    *?
    @return
    *?
    @version?1.0
    */
    public?void?initialize(Collection?collection,?String?methodName)
    throws?SecurityException,?NoSuchMethodException,
    IllegalArgumentException,?IllegalAccessException,?InvocationTargetException?{

    for(Iterator?i=collection.iterator();i.hasNext()Wink{
    Object?object?
    =?i.next();
    this.initialize(object,methodName);
    }
    }
    }?

    這個方法的好外是:可以不在hbm.xml的文件當中,指定為lazy=true這個模式,可以直接使用。使用方法如下:
    如果你使用SPRING,則需要把hibernateUtil注入其中:
    ?<bean?id="hibernateUtilTarget"?class="com.antbee.j2eemodel.util.HibernateUtil">
    <property?name="sessionFactory">
    <ref?local="mssqlSessionFactory"?/>
    </property>
    </bean>

    <bean?id="hibernateUtil"?parent="BaseTransactionProxy"?class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property?name="target">
    <ref?local="hibernateUtilTarget"?/>
    </property>
    </bean>
    <!--配置基礎事務-->
    <bean?id="BaseTransactionProxy"?class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"?abstract="true">
    <property?name="transactionManager">
    <ref?bean="mssqltransactionManager"?/>
    </property>
    <property?name="proxyTargetClass">
    <value>true</value>
    </property>
    <property?name="transactionAttributes">
    <props>
    <prop?key="*">PROPAGATION_REQUIRED</prop>
    </props>
    </property>
    </bean>?

    使用示例:
    如果你使用STRUTS,則需要這樣:
    List?what_ur_view?=?XXXManager.find(.);//取得你要展示的對象
    //如果這個對象當中有延遲加載的對象(SET)時,則需要如下加載就行
    this.hibernateUtil.initialize(what_ur_view,?"getTbShipmentSale");
    //其中getTbShipmentSale是其對象(SET也可以操作)?

    在頁面顯示的時候,你就可以使用JSTL如下表述:
    <c:out?value="${what_ur_view.tbShipmentSale.goodsReceivePersonPhone}"?/>//呵呵,是不是很爽呀。?

    同樣的方法,我們也可以對一個SET在頁面進行顯示,方法如下:
    <c:forEach?items="${what_ur_view.tbShipmentProductMappingSet}"?var="ProductMapping"?varStatus="status">
    <c:out?value="${ProductMapping.productNum}"?/>
    <c:out?value="${ProductMapping.tbOutOfWarehouse.outOfWarehouseNum}"?/>
    </c:forEach>
    //呵呵,支持多級嵌套,?

    在ACTION當中則需要加入
    hibernateUtil.initialize(what_ur_view.getTbShipmentProductMappingSet(),
    new?String[]?{?"getTbProduct",?"getTbOutOfWarehouse",
    "getTbProductConfigure"?});?
    呵,如果你要是在HIBERNATE當中使用,這個就太簡單了吧。

    怎么樣?呵呵呵,
    從此,我對STRUTS的標簽深惡痛絕,而對JSTL情有獨鐘了。

    posted on 2006-07-21 10:09 @家軍 閱讀(5596) 評論(2)  編輯  收藏 所屬分類: J2EE技術類

    評論

    # re: hibernate的延遲加載通用方法 2006-07-23 13:24 crazycy

    從此,我對STRUTS的標簽深惡痛絕,而對JSTL情有獨鐘了。

    同樣的感覺...
    本質都是一樣的;渴望一個標準來統一,JSTL出現并成熟了;也通用,幸事哦

      回復  更多評論   

    # re: hibernate的延遲加載通用方法[未登錄] 2008-06-14 10:40 AA

    我基本看不懂,小弟愚笨 哈哈  回復  更多評論   

    主站蜘蛛池模板: 成年性午夜免费视频网站不卡| 精品国产一区二区三区免费| 毛片a级三毛片免费播放| 中文字幕亚洲第一在线| 足恋玩丝袜脚视频免费网站| 日韩亚洲Av人人夜夜澡人人爽 | 亚洲国产最大av| 成人超污免费网站在线看| 亚洲女子高潮不断爆白浆| 四虎成人免费观看在线网址| 日韩欧美亚洲中文乱码| 亚洲国产一区二区三区| GOGOGO高清免费看韩国| 亚洲天堂男人天堂| 波多野结衣中文字幕免费视频 | 亚洲伊人久久大香线蕉在观| 国色精品卡一卡2卡3卡4卡免费| 欧洲 亚洲 国产图片综合| 日本媚薬痉挛在线观看免费| 国产天堂亚洲精品| 亚洲午夜福利717| 日本免费大黄在线观看| 亚洲无吗在线视频| 俄罗斯极品美女毛片免费播放| 美女黄频视频大全免费的| 国产亚洲一区二区手机在线观看 | 免费在线看污视频| 亚洲六月丁香六月婷婷蜜芽| 国产成人高清精品免费软件| 成人妇女免费播放久久久| 亚洲美女视频一区二区三区| 国产精品另类激情久久久免费| 精品免费久久久久国产一区| 亚洲嫩草影院在线观看| 国产又黄又爽又刺激的免费网址| 中文字幕乱码系列免费| 亚洲第一成人在线| 亚洲日韩国产精品第一页一区| 1000部拍拍拍18勿入免费视频软件 | 暖暖免费高清日本一区二区三区| jizz在线免费观看|