Java 如何使用hibernate从多表查询中获取数据?
我正在使用Spring和Hibernate开发一个简单的应用程序。IDE:Eclipse 我想展示一下学生的时间表 时间表使用学生表、科目表、考试表和班级表 课程表包括:学生姓名、卷号、科目、班级、考试、时间、截止时间和日期 我已经编写了一个查询works with>1表,该表将返回一条记录,该记录将显示为schedule 查询没有问题我已经在控制台上打印了对象 当从控制器发送的列表中检索记录时,我在我的.jsp上收到一个NumberFormatException 1从jsp上的列表中检索多个表值是否正确??如果这个方法不对,请建议正确的方法 2以下代码任何部分的任何其他变更,能够满足我的需求 3做同样事情的其他方法 例外情况: 阶级 考试 主题Java 如何使用hibernate从多表查询中获取数据?,java,hibernate,spring-mvc,Java,Hibernate,Spring Mvc,我正在使用Spring和Hibernate开发一个简单的应用程序。IDE:Eclipse 我想展示一下学生的时间表 时间表使用学生表、科目表、考试表和班级表 课程表包括:学生姓名、卷号、科目、班级、考试、时间、截止时间和日期 我已经编写了一个查询works with>1表,该表将返回一条记录,该记录将显示为schedule 查询没有问题我已经在控制台上打印了对象 当从控制器发送的列表中检索记录时,我在我的.jsp上收到一个NumberFormatException 1从jsp上的列表中检索多个表
@Entity
@Table(name="subject")
public class Subject {
@Id
@GeneratedValue
@Column(name="id")
private int id;
@Column(name="subjectname")
private String subjectname;
@ManyToOne
private Classs classs;
Getters & Setters.....
}
在Controller中,我编写了如下代码:
@RequestMapping(value="schedule" ,method=RequestMethod.GET)
public ModelAndView schedule(@ModelAttribute("attribute") Student student,BindingResult result,HttpSession session)throws Exception
{
int roll=Integer.parseInt((String) session.getAttribute("username"));
System.out.println("roll no is========="+roll);
List<Student> stud = adminstudentdao.getStudentSchedule(roll);
System.out.println("list is========="+stud);
ModelMap map=new ModelMap();
map.addAttribute("scheduleList",stud);
return new ModelAndView("studentschedule",map);
}
Jsp:
我建议您使用Hibernate原生SQL。为此,您可以将AdminStudentDaoImpl.java修改为:
public List getStudentSchedule(int a) {
Session sessionHb = session.openSession();
String sql = "select stud.firstname,stud.roll,sub.subjectname,cls.classname,exam.exam_name,exam.from_time,exam.to_time,exam.exam_date from Student stud,Subject sub,Classs cls,Exam exam where exam.classs=cls.id and exam.subject=sub.id and sub.classs=cls.id and stud.classs=cls.id and stud.roll= :roll";
SQLQuery query = sessionHb.createSQLQuery(sql);
query.setParameter("roll", a);
query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
return query.list();
}
我希望它能有所帮助:如何迭代此方法返回的列表??如本列表所示,存在多个实体。
@Entity
@Table(name="class")
public class Classs {
@Id
@GeneratedValue
@Column(name="id")
private int id;
@Column(name="classname")
private String classname;
Getters & Setters.....
}
@Entity
@Table(name="exam")
public class Exam {
@Id
@GeneratedValue
@Column(name="id")
private int id;
@Column(name="exam_name")
private String exam_name;
@Column(name="exam_date")
private String exam_date;
@Column(name="from_time")
private String from_time;
@Column(name="to_time")
private String to_time;
@ManyToOne
private Subject subject;
@ManyToOne
private Classs classs;
Getters & Setters.....
}
@Entity
@Table(name="subject")
public class Subject {
@Id
@GeneratedValue
@Column(name="id")
private int id;
@Column(name="subjectname")
private String subjectname;
@ManyToOne
private Classs classs;
Getters & Setters.....
}
@RequestMapping(value="schedule" ,method=RequestMethod.GET)
public ModelAndView schedule(@ModelAttribute("attribute") Student student,BindingResult result,HttpSession session)throws Exception
{
int roll=Integer.parseInt((String) session.getAttribute("username"));
System.out.println("roll no is========="+roll);
List<Student> stud = adminstudentdao.getStudentSchedule(roll);
System.out.println("list is========="+stud);
ModelMap map=new ModelMap();
map.addAttribute("scheduleList",stud);
return new ModelAndView("studentschedule",map);
}
<table border="0" width="100%" cellpadding="0" cellspacing="0" id="schedule-table">
<tr>
<th class="table-header-repeat line-left minwidth-1"><a href="">Student name</th>
<th class="table-header-repeat line-left minwidth-1"><a href="">Roll number</th>
<th class="table-header-repeat line-left minwidth-1"><a href="">Subject</th>
<th class="table-header-repeat line-left minwidth-1"><a href="">Class</th>
<th class="table-header-repeat line-left minwidth-1"><a href="">exam</a></th>
<th class="table-header-repeat line-left minwidth-1"><a href="">from time</th>
<th class="table-header-repeat line-left minwidth-1"><a href="">to time</th>
<th class="table-header-repeat line-left minwidth-1"><a href="">date</th>
</tr>
<c:if test="${empty scheduleList}">
<tr>
<td colspan="8"><b>No Results found</b></td>
</tr>
</c:if>
<c:forEach items="${scheduleList}" var="var">
<tr>
<td><b>${var.firstname }</b></td>
<td><b>${var.roll }</b></td>
<td><b>${var.subjectname }</b></td>
<td><b>${var.classname }</b></td>
<td><b>${var.exam_name }</b></td>
<td><b>${var.from_time }</b></td>
<td><b>${var.to_time }</b></td>
<td><b>${var.exam_date }</b></td>
</tr>
</c:forEach>
</table>
public List getStudentSchedule(int a) {
Session sessionHb = session.openSession();
String sql = "select stud.firstname,stud.roll,sub.subjectname,cls.classname,exam.exam_name,exam.from_time,exam.to_time,exam.exam_date from Student stud,Subject sub,Classs cls,Exam exam where exam.classs=cls.id and exam.subject=sub.id and sub.classs=cls.id and stud.classs=cls.id and stud.roll= :roll";
SQLQuery query = sessionHb.createSQLQuery(sql);
query.setParameter("roll", a);
query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
return query.list();
}