<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

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

    主站蜘蛛池模板: 亚洲综合激情六月婷婷在线观看| 亚洲中文字幕伊人久久无码| 久久亚洲精品无码| 97在线免费观看视频| 亚洲精品国精品久久99热| 无码 免费 国产在线观看91| 国产一区二区三区在线免费 | 波多野结衣免费在线| 久久精品国产亚洲AV大全| 在线观看免费视频资源| 亚洲电影唐人社一区二区| 国产精彩免费视频| 亚洲AV男人的天堂在线观看| 免费黄色一级毛片| 国产亚洲日韩在线a不卡| 亚洲?V乱码久久精品蜜桃| 国产精品成人69XXX免费视频| 国内精品久久久久久久亚洲| 最好免费观看高清在线| 亚洲国产成+人+综合| 妞干网免费视频观看| 三级片免费观看久久| 亚洲狠狠婷婷综合久久久久| 人妻无码一区二区三区免费 | 中文字幕无线码中文字幕免费| 亚洲啪啪AV无码片| 巨波霸乳在线永久免费视频| 亚洲欧美自偷自拍另类视| 亚洲AⅤ优女AV综合久久久| 精品国产一区二区三区免费| 亚洲国产成人精品无码一区二区| 免费无码成人AV片在线在线播放| caoporm碰最新免费公开视频| 亚洲精品国产成人99久久| 永久免费bbbbbb视频| a级毛片高清免费视频就| 亚洲中字慕日产2021| 亚洲精品尤物yw在线影院| 国产黄色免费网站| h片在线播放免费高清 | 亚洲日韩国产精品无码av|