<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 @家軍 閱讀(5595) 評論(2)  編輯  收藏 所屬分類: J2EE技術類

    評論

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

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

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

      回復  更多評論   

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

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

    主站蜘蛛池模板: 亚洲香蕉久久一区二区| 亚洲伦理一区二区| 无码天堂亚洲国产AV| 四虎影院免费在线播放| 亚洲精品色播一区二区| 国产真实伦在线视频免费观看| 亚洲av最新在线观看网址| 在线免费观看污网站| 国产精品无码亚洲精品2021 | 日韩在线免费播放| 亚洲精品无AMM毛片| 国产精品自在自线免费观看| 国产亚洲美女精品久久| 亚洲伊人久久综合影院| 免费无码作爱视频| 亚洲日本国产乱码va在线观看| 思思re热免费精品视频66| 亚洲七久久之综合七久久| 国产免费午夜a无码v视频| a在线视频免费观看在线视频三区 a毛片成人免费全部播放 | av大片在线无码免费| 亚洲久悠悠色悠在线播放| 日本高清色本免费现在观看| 午夜在线免费视频| 亚洲av无码精品网站| 可以免费看黄的网站| 国产精品亚洲а∨天堂2021| 国产亚洲精品成人AA片新蒲金| 污污网站免费观看| 亚洲国产精品自在自线观看| 国产亚洲人成网站在线观看| 99精品视频在线免费观看| 亚洲成A人片在线播放器| 亚洲国产精品自产在线播放 | 114一级毛片免费| 无码天堂亚洲国产AV| 久久99国产亚洲高清观看首页| 性短视频在线观看免费不卡流畅 | 亚洲av乱码一区二区三区按摩 | 韩国免费三片在线视频| baoyu122.永久免费视频|