0

単一のエンティティ クラスを返す以下のような Hibernate コードがあります。

SQLQuery query = 
                session.createSQLQuery("select * from Employee");
            query.addEntity(Employee.class);
                       List<Employee> emplist= query.list();

上記のコードの場合、私の Jstl 作業コードは次のとおりです。

<c:choose>
<c:when test="${requestScope.size!=0}">
<table border="1">
<tr>
<th>
EmployeeName
</th>
<th>EmployeeDepartment</th>

</tr>
<c:forEach items="${requestScope.absentlist}" var="emps">
<tr>
<td><c:out value="${emps.empno}"/></td>
<td><c:out value="${emps.empname}"/></td>

</tr>


</c:forEach>

しかし、私の要件は、2 つのエンティティを返す Hibernate の jstl コードを記述することです。

これが私のHibernateコードです:

SQLQuery query = session
                    .createSQLQuery("CALL AbsentReportproc(:_fromdate,:_todate)");
            query.addEntity(Master.class);
            query.addEntity(DateRange.class);
            query.setParameter("_fromdate", "2012-12-03");
            query.setParameter("_todate", "2012-12-04");

            List<RecordSet> obj = query.list();     
            Iterator it=obj.iterator();

             while(it.hasNext())
                {
                    Object[] obj1 = (Object[]) it.next();
                    for (int i = 0; i < obj1.length; i++) {

                        RecordSet set=(RecordSet)obj1[i];
                        if(set instanceof Master){
                         System.out.println("Employee Code"+((Master) set).getEmpcode());
                         System.out.println("Employee Dept"+((Master) set).getDept());
                         System.out.println("Employee Name"+((Master) set).getEmpname());                   
                        }
                        if(set instanceof DateRange){
                         System.out.println("AbsentDate"+((DateRange) set).getDdate());
                        }
                    }
                }

上記の結果をjspページに表示するためのJSTLコードを教えてください。

4

2 に答える 2

2

したがって、実際には があり、リスト内のList<Object[]>それぞれObject[]には、最初の要素として Master のインスタンスが含まれ、2 番目の要素として DateRange のインスタンスが含まれます。

これら 2 つのオブジェクトを含むクラスを作成することから始めます。これにより、コードが読みやすくなります。

public class MasterAndDateRange {
    private Master master;
    private DateRange dateRange;
    // constructor and getters omitted for brevity
}

次に、を繰り返してList<Object[]>を作成しList<MasterAndDateRange>ます。

次に、このリストをリクエスト属性 ("listOfMasterAndDateRange"など) に保存します。

次に、JSP で、JSTL を使用してこのリストを反復処理します。

<c:forEach var="masterAndDateRange" items="listOfMasterAndDateRange">
   ...
   <c:out value="${masterAndDateRange.master.foo}"/>
   ...
   <c:out value="${masterAndDateRange.dateRange.bar}"/>
   ...
</c:forEach>
于 2013-02-04T10:33:34.783 に答える
0

コードごとに、単一のテーブルクエリだけでなく、ストアドプロシージャを呼び出しています。したがって、休止状態はオブジェクトリストのみを返します。

ループを繰り返して、必要なオブジェクトを設定する必要があります。

他のオプションは、@JB Nizet によって提案されています。

于 2013-02-04T12:17:35.663 に答える