ï»??xml version="1.0" encoding="utf-8" standalone="yes"?> JSTLè¯æ³•åŠå‚æ•?br />JSTL包å«ä»¥ä¸‹çš„æ ‡½{?
 åå— ¾cÕdž‹ æè¿°  2åQ?lt;c:set>  åå— ¾cÕdž‹ æè¿°  3åQ?lt;c:remove>  4åQ?lt;c:catch>  æ¡äšgæ ‡ç¾ Â åå— ¾cÕdž‹ æè¿°  2åQ?lt;c:choose>  3åQ?lt;c:when>  4åQ?lt;c:otherwise>  ˜qä»£æ ‡ç¾ Â è¯æ³•2åQšè„P代固定的‹Æ¡æ•°.  åå— ¾cÕdž‹ æè¿°  URLç›¸å…³çš„æ ‡½{? Â è¯æ³•2åQšèµ„æºçš„内容使用Reader对象å‘外暴露ã€?  2åQ?lt;c:redirct>  3åQ?lt;c:url>  åå— ¾cÕdž‹ æè¿°  SQLç›¸å…³çš„æ ‡½{?<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2007-3-20 16:44:34 by Hibernate Tools 3.2.0.beta8 -->
<hibernate-mapping>
    <class name="com.mip.biz.defect.domain.TypidefdetailVo">
        <id name="oid" type="java.lang.Long">
            <column name="OID" precision="22" scale="0" />
            <generator class="assigned" />
        </id>
        <property name="devtype" type="string">
            <column name="DEVTYPE" length="20" />
        </property>
        <property name="pwlevel" type="string">
            <column name="PWLEVEL" length="20" />
        </property>
        <property name="stno" type="java.lang.Long">
            <column name="STNO" precision="22" scale="0" />
        </property>
        <property name="stname" type="string">
            <column name="STNAME" length="50" />
        </property>
        <property name="factory" type="string">
            <column name="FACTORY" length="40" />
        </property>
   Â
        <property name="devstyle" type="string">
            <column name="DEVSTYLE" length="40" />
        </property>
        <property name="finddate" type="java.util.Date">
            <column name="FINDDATE" length="7" />
        </property>
        <property name="definfo" type="string">
            <column name="DEFINFO" length="200" />
        </property>
        <property name="defreason" type="string">
            <column name="DEFREASON" length="200" />
        </property>
        <property name="measure" type="string">
            <column name="MEASURE" length="200" />
        </property>
        <property name="cleardate" type="java.util.Date">
            <column name="CLEARDATE" length="7" />
        </property>
     Â
    </class>
   Â
<!-- 典型讑֤‡¾~ºé™·æŠ¥è¡¨åQˆç´§æ€?é‡å¤§+一般,详细情况åQ‰Â?/span>-->
<sql-query name="queryTypidefdetailReportQuerySql">
    <return alias="detail" class="com.mip.biz.defect.domain.TypidefdetailVo">
        <return-property name="oid" column="typOID"/>
        <return-property name="devtype" column="typDEVTYPE"/>
        <return-property name="pwlevel" column="typPWLEVEL"/>
        <return-property name="factory" column="typFACTORY"/>
        <return-property name="devstyle" column="typDEVSTYLE"/>
        <return-property name="finddate" column="typFINDDATE"/>
        <return-property name="definfo" column="typDEFINFO"/>
        <return-property name="defreason" column="typDEFREASON"/>                               Â
        <return-property name="cleardate" column="typCLEARDATE"/>                               Â
        <return-property name="measure" column="typMEASURE"/>
       Â
        <return-property name="stno" column="typSTNO"/>                                                       Â
        <return-property name="stname" column="typeSTNAME"/>       Â
               Â
    </return>
    <![CDATA[
    SELECTÂ
        1 as typSTNO,
        'stname' as typeSTNAME,
        definfo.taskbillid AS typOID,
        definfo.devtype AS typDEVTYPE,
        definfo.powerlevel AS typPWLEVEL,
        definfo.devfactory AS typFACTORY,
        definfo.xinghao AS typDEVSTYLE,
        definfo.findtime AS typFINDDATE,
        definfo.findcontent AS typDEFINFO,
        definfo.slidea AS typDEFREASON,
        definfo.checktime AS typCLEARDATE,
        definfo.checkresult AS typMEASURE
     FROM DEFECT_DEFECTINFO definfoÂ
     WHEREÂ
        definfo.orgid = :orgid
    ]]>
</sql-query>Â Â Â Â Â
</hibernate-mapping>
    public List queryTypidefdetailsByHibernate(Long loginerOrgid,Date startTime, Date endTime)Â
{
        Query query = this.getSession().getNamedQuery("queryTypidefdetailReportQuerySql");
        query.setLong("orgid", new Long(1));
        List result = query.list();
        return result;
    }
    //所有选项集åˆ
                List lsDefineOptions = new ArrayList();
               Â
                for(int j=0;j<lsOptions.size();j++)
{
                    Element option = (Element) lsOptions.get(j);
                    String label = option.getAttributeValue("label");
                    String index = option.getAttributeValue("index");
                    String flowstate = option.getAttributeValue("flowstate");
                    String querySql = option.getChildText("query-sql");
                   Â
                    //æ“作™å¹å¯¹è±?/span>
                    SearchOptionDefine defineOption = new SearchOptionDefine();
                    defineOption.setLabel(label);
                    if(StringUtils.isNotBlank(index))
{
                        defineOption.setIndex(Integer.parseInt(index));
                    }
                    if(StringUtils.isNotBlank(flowstate))
{
                        defineOption.setFlowstate(Integer.parseInt(flowstate));
                    }
                    defineOption.setQuerySql(querySql);
                    Log.debug("querySql:"+querySql);
                   Â
                    lsDefineOptions.add(defineOption);
                }
               Â
                //所有选项集åˆçš„æŽ’åº?/span>
                java.util.Collections.sort(lsDefineOptions);
package com.mip.core.objects;
import java.io.Serializable;
/**Â *//**
 * <p>Â
 * 主题查询对象
 * </p>
 * @author Libin
 * @date Mar 29, 2007
 * @version 4.0
 *
 * @see AnotherClass
 */
public class SearchOptionDefine implements Serializable,ComparableÂ
{
    /** *//**
     *Â
     */
    private static final long serialVersionUID = 3256440313546683697L;
    /** *//** A int variableÂ æ‰€æœ‰çŠ¶æ€æ ‡å¿?/span>*/
    public static final int ALL_STATE=999;
   Â
    /** *//**
     * Constructs a SearchDefine
     */
    public SearchOptionDefine()
{
        index=0;
        flowstate=ALL_STATE;
    }
   Â
    /** *//**
     * 主题查询的æ¯ä¸€™å¹å®šä¹?
    *    label:对应下拉框显½Cºçš„䏿–‡åç§°
    *    index:排åºåºå·
    *    flowstate:对应‹¹ç¨‹çжæ€?¾l“刋¹ç¨‹çŠ¶æ€æ¥¼‹®å®šæ˜¯å¦æ˜„¡¤ºå½“å‰é€‰é¡¹
    *    query_sql:原生SQLè¯å¥,主题查询的æ¡ä»?br />
    */   Â
    private String label;
    private Integer index;
    private Integer flowstate;
    private String querySql;
   Â
    public Integer getFlowstate()Â
{
        return flowstate;
    }
    public void setFlowstate(Integer flowstate)Â
{
        this.flowstate = flowstate;
    }
    public Integer getIndex()Â
{
        return index;
    }
    public void setIndex(Integer index)Â
{
        this.index = index;
    }
    public String getLabel()Â
{
        return label;
    }
    public void setLabel(String label)Â
{
        this.label = label;
    }
    public String getQuerySql()Â
{
        return querySql;
    }
    public void setQuerySql(String query_sql)Â
{
        this.querySql = query_sql;
    }
   Â
    public int compareTo(Integer arg0)Â
{
        return index.compareTo(arg0);
    }
   Â
    public int compareTo(Object obj)Â
{
        // TODO Auto-generated method stub
        return (this.getIndex() - ((SearchOptionDefine)obj).getIndex());
    }
   Â
   Â
   Â
}
å¸¸ç”¨çš„æ ‡½{¾ï¼šå¦?lt;c:out>ã€?lt;c:remove>ã€?lt;c:catch>ã€?lt;c:set>½{?br />æ¡äšgæ ‡ç¾åQšå¦‚<c:if><c:when>ã€?lt;c:choose>ã€?lt;c:otherwise>½{?br />URLæ ‡ç¾åQšå¦‚<c:import>ã€?lt;c:redirect>å’?lt;c:url>½{?br />XMLæ ‡ç¾åQšå¦‚<xml:out>½{?br />å›½é™…åŒ–è¾“å‡ºæ ‡½{¾ï¼šå¦?lt;fmt:timeZone>½{?br />SQLæ ‡ç¾åQšå¦‚<sql:query>ã€?lt;sql:update>ã€?lt;sql:transaction>½{?/p>
ä¸€èˆ¬ç”¨é€”çš„æ ‡ç¾:
1åQ?lt;c:out>
没有Bodyæ—¶çš„è¯æ³•
<c:out value=â€valueâ€?[escapeXml=â€{true|false}â€] [default=â€defaultValueâ€]/>
有Bodyæ—¶çš„è¯æ³•
<c:out value=â€valueâ€?[escapeXml=â€{true|false}â€]>
˜q™é‡Œæ˜¯Body部分
</c:out>
value Object ž®†è¦è¾“出的表辑ּ
escapeXml boolean ¼‹®å®šä»¥ä¸‹å—符:<,>,&,â€?â€åœ¨å—ç¬¦ä¸²ä¸æ˜¯å¦è¢«é™¤æ•ŽÍ¼Œé»˜è®¤ä¸ºtrue
default Object 如果vaule计算åŽçš„¾l“果是nullåQŒé‚£ä¹ˆè¾“凸™¿™ä¸ªé»˜è®¤å€?
˜q™ä¸ªæ ‡ç¾ç”¨äºŽåœ¨æŸä¸ªèŒƒå›?pageã€requestã€sessionã€application½{?ä¸ä‹É用æŸä¸ªåå—设定特定的å€û|¼Œæˆ–者设定æŸä¸ªå·²¾lå˜åœ¨çš„javabean对象的属性。他¾cÖM¼¼äº?lt;%request.setAttrbute(“nameâ€?â€valueâ€?;%>
è¯æ³•1åQšä‹É用value属性设定一个特定范围ä¸çš„属性ã€?
<c:set value=â€valueâ€?var=â€varNameâ€?[scope=â€{page|request|session|application}â€]/>
è¯æ³•2åQšä‹É用value属性设定一个特定范围ä¸çš„属性,òq¶å¸¦æœ‰ä¸€ä¸ªBodyã€?
<c:set var=â€varNameâ€?[scope=â€{page|request|session|application}â€]>
Body部分
</c:set>
è¯æ³•3åQšè®¾¾|®æŸä¸ªç‰¹å®šå¯¹è±¡çš„一个属性ã€?
<c:set value=â€valueâ€?target=â€targetâ€?property=â€propertyNameâ€?>
è¯æ³•4åQšè®¾¾|®æŸä¸ªç‰¹å®šå¯¹è±¡çš„一个属性,òq¶å¸¦æœ‰ä¸€ä¸ªBodyã€?
<c:set target=â€targetâ€?property=â€propertyNameâ€?gt;
Body部分
</c:set>
value Object ž®†è¦è®¡ç®—的表到å¼ã€?
var String 用于表示value 值的属性,如果è¦åœ¨å…¶ä»–æ ‡ç¾ä¸ä‹É用,ž®±æ˜¯é€šè¿‡˜q?个var指定的值楘q›è¡Œçš„ã€‚å®ƒç›¸å½“äºŽåœ¨æ ‡ç¾å®šä¹‰äº†ä¸€ä¸ªå˜é‡ï¼Œòq¶ä¸”˜q™ä¸ªå˜é‡åªèƒ½åœ¨æ ‡½{¾ä¸çš„一个ã€?
scope String var的有效范å›ß_¼Œå¯ä»¥æ˜¯page|request|session|applicationä¸çš„一ä¸?
target String ž®†è¦è®„¡½®å±žæ€§çš„对象åQŒå®ƒå¿…须是javabean或则java.util.Map对象
property Object 待设定的Target对象ä¸çš„属性åå—,比如在javabean䏿œ‰ä¸ªname属性,æä¾›äº†setUserIdæ–ÒŽ³•åQŒé‚£ä¹ˆè¿™é‡Œå¡«userIdã€?
<c:remove var=â€varNameâ€?[scope=â€{page|request|session|application}â€]/>
˜q™ä¸ªæ ‡ç¾ç›¸å½“于æ•èŽ·åœ¨å®ƒé‡Œè¾¹çš„æ ‡ç¾æŠ›å‡ºçš„å¼‚å¸¸å¯¹è±?
<c:catch [var=â€varNameâ€]> //var是异常的åå—
内容
</c:catch>
1åQ?<c:if>
è¯æ³•1åQšæ— Body情况
<c:if test=â€testConditionâ€?var=â€varNameâ€?[scope=â€page|request|session|applicationâ€]/>
è¯æ³•2åQšæœ‰Body的情å†?
<c:if test=â€testConditionâ€?var=â€varNameâ€?[scope=â€page|request|session|applicationâ€]>
Body内容
</c:if>
test Boolean 表达å¼çš„æ¡äšgåQŒç›¸å½“于if()ä¸çš„æ¡äšg判æ–è¯å¥ã€?
var String 表示˜q™ä¸ªè¯å¥çš„åå—ã€?
scope String var˜q™ä¸ªå˜é‡çš„作用范围ã€?
è¯æ³•åQ?lt;c:choose>
Body内容(<c:when>å’?lt;c:otherwise>åæ ‡½{?
</c:choose>
注æ„åQšå®ƒçš„Bodyåªèƒ½ç”׃»¥ä¸‹å…ƒç´ 组æˆ?
1) ½Iºæ ¼
2) 0或多ä¸?lt;c:when>åæ ‡½{¾ï¼Œ<c:when>å¿…é¡»åœ?lt;c:otherwise>æ ‡ç¾ä¹‹å‰å‡ºçް.
3) 0个或多个<c:otherwise>åæ ‡½{¾ã€?
代表的是<c:choose>的一个æ¡ä»¶åˆ†æ”?åªèƒ½åœ?lt;c:choose>ä¸ä‹Éç”?
è¯æ³•åQ?lt;c:when test=â€testConditionâ€?gt; //test是boolean¾cÕdž‹,ç”¨äºŽåˆ¤æ–æ¡äšg真å‡
Bodyè¯å¥
</c:when>
代表的是<c:choose>ä¸çš„æœ€åŽé€‰æ‹©ã€‚å¿…™åÕdœ¨æœ€åŽå‡ºçŽ?
<c:otherwise>
内容
</c:otherwise>
1åQ?lt;c:forEach>
è¯æ³•1åQšåœ¨Collectionä¸è„Pä»?
<c:forEach[var=â€varNameâ€] items=â€collectionâ€?[varStatus=â€varStatusNameâ€]
[begin=â€beginâ€] [end=â€endâ€] [step=â€stepâ€]
Body内容
</c:foeEach>
<c:forEach [var=â€varNameâ€] [varStatus=â€varStatusNameâ€]
[begin=â€beginâ€] [end=â€endâ€] [step=â€stepâ€]
Body内容
</c:foeEach>
var String ˜qä»£çš„å‚æ•ŽÍ¼Œå®ƒæ˜¯æ ‡ç¾å‚æ•°åQŒåœ¨å…¶ä»–æ ‡ç¾ä¸é€šè¿‡å®ƒæ¥å¼•用˜q™ä¸ªæ ‡ç¾ä¸çš„内容ã€?
Items Collectionã€ArrayListã€?è¦è„P代的items集åˆ.
Iteratorã€Mapã€Stringã€?
Eunmeration½{?
VarStatus String 表示˜q代的状æ€ï¼Œå¯ä»¥è®‰K—®˜q代自èín的信æ?
Begin int 表示开始è„P代的ä½ç½®ã€?
End int 表示¾l“柘q代的佾|®ã€?
Step int 表示˜q代¿UÕdŠ¨çš„æ¥é•¿ï¼Œé»˜è®¤ä¸?ã€?
1åQ?lt;c:import>
è¯æ³•1åQšèµ„æºçš„内容使用String对象å‘外暴露
<c:import url=â€urlâ€?[context=â€contextâ€]
[var=â€varNameâ€] [scope=â€{page|request|session|application}â€] [charEncoding=â€charEncodingâ€]>
内容
</c:import>
<c:import url=â€urlâ€?[context=â€contextâ€]
varReader=â€varReaderNameâ€?[charEncoding=â€charEncodingâ€]>
内容
</c:import>
åå— ¾cÕdž‹ æè¿°
url String 待导入资æºçš„URLåQŒå¯ä»¥æ˜¯ç›¸å¯¹è·¯å¾„å’Œç»å¯¹èµ\径,òq¶ä¸”å¯ä»¥å¯¼å…¥å…¶ä»–ä¸ÀLœºèµ„æº
context String 当ä‹É用相对èµ\径访问外部contextèµ„æºæ—Óž¼Œcontext指定了这个资æºçš„åå—ã€?
var String 傿•°çš„åå—ã€?
scope String var傿•°çš„作用范围ã€?
cahrEncoding String 输入资æºçš„å—½W¦ç¼–ç ã€?
varReader String ˜q™ä¸ªå‚数的类型是Reader,用于è¯Õd–资æºã€?
è¯æ³•1:没有Body的情å†?
<c:redirect url=â€valueâ€?[context=â€contextâ€]/>
è¯æ³•2åQšæœ‰Body情况下,在Body䏿Œ‡å®šæŸ¥è¯¢çš„傿•°
<c:redirect url=â€valueâ€?[context=â€contextâ€]>
<c:param name=â€nameâ€?value=â€valueâ€?>
</c:redirect>
è¯æ³•1åQšæ²¡æœ‰Body
<c:url value=â€valueâ€?[context=â€contextâ€] [var=â€varNameâ€] [scope=â€{page|request|session+application}â€]/>
è¯æ³•2åQšæœ‰Body
<c:url value=â€valueâ€?[context=â€contextâ€] [var=â€varNameâ€] [scope=â€{page|request|session+application}â€]>
<c:param name=â€nameâ€?value=â€valueâ€?>
</c:url>
value String URL�
context String 当ä‹É用相对èµ\径访问外部contextèµ„æºæ—Óž¼Œcontext指定了这个资æºçš„åå—
var String æ ‡è¯†˜q™ä¸ªURLæ ‡é‡ã€?
Scope String å˜é‡ä½œç”¨èŒƒå›´ã€?
1åQ?lt;sql:setDataSource>
2åQ?lt;sql:query>
3åQ?lt;sql:update>
4åQ?lt;transaction>
5åQ?lt;param>
<P>java.lang.NoSuchMethodError: com.liusoft.dlog4j.beans.UserBean.getHibernateLazyInitializer()Lorg/hibernate/proxy/LazyInitializer;<BR> at com.liusoft.dlog4j.beans.UserBeanåQ„$EnhancerByCGLIBåQ„$16e4f0b9.getHibernateLazyInitializer(<GENERATED></GENERATED>)</P>
<P>而开始一直很æ£å¸¸,™åµé¢è®‰K—®ä¹Ÿæ²¡é—®é¢˜, 便¤åˆ¤æ–是hibernate的一个问é¢?今天早上¾|‘上æœçƒ¦äº†è¿™ä¸ªé—®é¢?å‘现˜q™æ˜¯Hibernate的一个BUG, 详细è¯ïLœ‹é“¾æŽ¥ <A href=">
<P>我测试的æœåŠ¡å™¨ç”¨çš„æ˜¯linux¾pÈ»Ÿ, æ®è¯´è¯¥é—®é¢˜åœ¨windows下ä¸ä¼šå‡ºçŽ? 公叿œ‰ä¸ª¾|‘站用DLOGæå¾çš„å·²¾lè¿è¡Œäº†å¾ˆä¹…没有ä»ÖM½•问题.</P>
<P>æ ÒŽ®Hibernateçš„BUGä¸ç½‘å‹çš„评论è¯? 使用server VMå¯ä»¥è§£å†³˜q™ä¸ªé—®é¢˜, ç›®å‰ä¸ºæ¢˜q˜æ²¡æœ‰æµ‹è¯•是å¦å±žå®?</P>
<P>ä¸è¿‡˜q™ä¸ªé—®é¢˜åœ¨BUG库ä¸è®°å½•的是åŽÕd¹´òq´åº•æå‡ºçš? ˜q™ä¹ˆé•¿æ—¶é—´äº†˜q˜æ²¡æœ‰å¾—到hibernate的解å†? å› äØ“æœ€æ–°ç‰ˆæ˜?.2 RC2åŒæ ·å˜åœ¨ç›¸åŒçš„é—®é¢? ˜q™è®©æˆ‘对Hibernate有些些失æœ? 当然äº?˜q™ä¹Ÿä¸å®Œå…¨æ˜¯Hibernate的错, 问题出在于cglib˜q™ä¸ªåº“上.</P>
<DIV class=spacer_20>
<DIV class=comment_content>
<P>è¯•éªŒè¡¨æ˜Žå¢žåŠ -server傿•°¼‹®å®žå¯ä»¥è§£å†³˜q™ä¸ªé—®é¢˜.</P>
<P>但是大家注æ„如果是Tomcatçš„è¯, 应该仔细‹‚€æŸ¥åœ¨catalina.shå“ªé‡Œå¢žåŠ -server, é‡è“v完用ps‹‚€æŸ¥ä¸€ä¸‹çœ‹å¢žåŠ çš„å‚æ•°æ˜¯å¦æœ‰æ•?</P>
<P>¾lè¿‡å‡ å万次的压力测è¯? 便—§½E›_¦‚æ³°å±±.<BR><!----><BR><!----></P>
<DIV class=comment_content>
<P>如何åŠ?server傿•°å‘? 最½Ž€å•的办法是在catalina.shæ–‡äšg开始佾|®å¢žåР䏋é¢ä¸€è¡?lt;/P>
<P>JAVA_OPTS="-server -Xms512m -Xmx512m"<BR><!----><BR><!----></P>
<P>hibernate 3.2的下一个版�lt;/P>
<P>ä¸å³ž®†ä¿®å¤è¿™ä¸ªåŠŸèƒ?lt;BR><!----><BR><!----></P></DIV></DIV></DIV>
首先创å¾ä»¥ä¸‹Oracalå˜å‚¨˜q‡ç¨‹:
CREATE OR REPLACE FUNCTION getUsersByAge(userAge in NUMBER)
 RETURN
 SYS_PEFCURSOR AS c_user SYS_REFCURSOR;
BEGIN
 OPEN c_user FOR
 SELECT ID,NAME,AGE FROM TUSER WHERE AGE = userAge;
 RETURN c_user;
END;
对应的sql-query定义如下:
<sql-query name="getUsersByAge" callable="true">
<return alias="user" class="">
 <return-property name="id" column="ID"/>
 <return-property name="name" column="NAME"/>
 <return-property name="age" column="AGE"/>
</return>
{ ? = call getUsersByAge(?) }
</sql-query>
‹¹‹è¯•½E‹åºå¦‚下:
Query query = session.getNamedQuery("getUsersByAge");
query.setInteger(0,18);
List list = query.list();
Iterator it = list.iterator();
while(it.hasNext()){
 TUser user = (TUser)it.next();
 System.out.println(user.getName());
}
摘自《深入浅出Hibernate�/p>