Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为Hibernate编写返回两个实体的jstl代码_Java_Spring_Hibernate_Jstl_Hibernate Mapping - Fatal编程技术网

Java 如何为Hibernate编写返回两个实体的jstl代码

Java 如何为Hibernate编写返回两个实体的jstl代码,java,spring,hibernate,jstl,hibernate-mapping,Java,Spring,Hibernate,Jstl,Hibernate Mapping,我有一个如下的Hibernate代码,它返回单个实体类: SQLQuery query = session.createSQLQuery("select * from Employee"); query.addEntity(Employee.class); List<Employee> emplist= query.list(); SQLQuery查询= createSQLQue

我有一个如下的Hibernate代码,它返回单个实体类:

SQLQuery query = 
                session.createSQLQuery("select * from Employee");
            query.addEntity(Employee.class);
                       List<Employee> emplist= query.list();
SQLQuery查询=
createSQLQuery(“从员工中选择*);
查询.补遗(Employee.class);
List 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>

雇员姓名
就业部
但我的要求是为返回两个实体的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());
                        }
                    }
                }
SQLQuery=session
.createSQLQuery(“调用AbsEnterproc(:_fromdate,:_todate)”;
查询补遗(主类);
addEntity(DateRange.class);
query.setParameter(“_fromdate”,“2012-12-03”);
query.setParameter(“_todate”,“2012-12-04”);
List obj=query.List();
迭代器it=obj.Iterator();
while(it.hasNext())
{
Object[]obj1=(Object[])it.next();
对于(int i=0;i

有谁能提供JSTL代码在jsp页面上显示上述结果吗?

因此实际上您有一个列表,列表中的每个对象[]都包含一个Master实例作为第一个元素,一个DateRange实例作为第二个元素

首先编写一个包含这两个对象的类,这将使代码更易于阅读:

public class MasterAndDateRange {
    private Master master;
    private DateRange dateRange;
    // constructor and getters omitted for brevity
}
然后遍历
列表
,创建一个
列表

然后将此列表存储在请求属性中(
“listOfMasterAndDateRange”
,例如)

然后,在JSP中,使用JSTL迭代此列表:

<c:forEach var="masterAndDateRange" items="listOfMasterAndDateRange">
   ...
   <c:out value="${masterAndDateRange.master.foo}"/>
   ...
   <c:out value="${masterAndDateRange.dateRange.bar}"/>
   ...
</c:forEach>

...
...
...

根据您的代码,您正在调用存储过程,而不仅仅是单表查询。因此hibernate将只返回对象列表

您需要迭代循环并填充所需的对象


其他选项如@JB Nizet所建议。

那么,它是一个
列表
还是一个
列表
?应该展示什么?怎么做?你的问题不清楚为什么你提供的JSTL不能同时适用于这两种情况。您可以发布支持对象的代码吗?当我调用list()方法时,我可以使用对象数组项,该数组项的obj[0]={Master obj,DateRange obj}等等…检查这个我已经用过但忘记在上面的链接中提到公共类Master extends记录集和公共类DateRange extends记录集你能给我示例代码我如何迭代吗请,我已经尝试过但面临类型转换异常object list=query.list();Iterator it=list.Iterator();虽然(it.hasNext()){MasterAndDateRange obj1=(MasterAndDateRange)it.next();}我已经尝试过了,但是面对类型转换异常对象无法转换到MasterAndDateRange,你能给我提供示例代码吗请阅读答案的前两句话:你有一个列表。由您将此列表转换为列表。通过迭代列表,将每个对象[]转换为MasterDateRange实例,然后添加到新列表中。不,我不能。你的工作就是提供代码。在列表上迭代并不是你应该害怕的事情。