有一个题目表,拥有老师tea_id和学生stu_Id,现在我想用HQL查询每一个老师的题目总数和相应的已被学生选的题目总数和没有被选过的题目总数,请问该怎么写HQL?结果是要用表格显示的,比如有题目表对应的类为Subject,老师表为Teacher,学生:Student.老师添加题目后,Subject表就有老师teaId,学生选了题目后,Subject表就有学生stuId,没选的题目Subject表里的学生stuId为null。我在想,如果通过查询后比如定义一个类
....
Subject sub = new Subject();
sub = Dao.findBy( ...);
在页面我应该怎么取得老师题目总数,和已选人数,未选人数?<s:property value='sub.???????'>这个问号又该怎么写?
请大家帮忙尽量写出完整的HQL语句和后面的取值方法吧,多谢了!

解决方案 »

  1.   

    请问你怎么求啊?HQL什么写?
      

  2.   

    String hql = "select count(sb) from Subject sb" 
    int count = (Integer)hql.uniqueResult();  求的总和hql = "select count(sb) from Subject sb where stuId is null"  
    int notSelect = (Integer)hql.uniqueResult();//没有选的人int select = count - notSelect  //应该是这样的吧!        
      

  3.   

    select count(sb) from Subject sb where stuId is null
    查询总数还要分页(就那一项)?
      

  4.   

    分页是这样的类package struts2.action.util;
    首先action里调用PageUtil类
    action如下:package struts2.action.student.subject;import hibernate.model.Subjectinfo;import java.util.List;
    import struts2.action.util.AllSubjectUtil;
    import struts2.action.util.SelectSubjectUtil;
    import struts2.action.util.SubjectInfoPageUtil;import com.opensymphony.xwork2.ActionSupport;public class AllTeachersAction extends ActionSupport { private List list;

    private int t_totalpage;

    private int currentpage; public List getList() {
    return list;
    } public void setList(List list) {
    this.list = list;
    } public int getT_totalpage() {
    return t_totalpage;
    } public void setT_totalpage(int t_totalpage) {
    this.t_totalpage = t_totalpage;
    } public int getCurrentpage() {
    return currentpage;
    } public void setCurrentpage(int currentpage) {
    this.currentpage = currentpage;
    } @Override
    public String execute() throws Exception {
    AllSubjectUtil page = new AllSubjectUtil();
    String hql="  from Subject ";
    list = page .QueryList(hql);//开始调用
          this.t_totalpage=page.totalPage;
    this.currentpage=page.currentPage;
    return SUCCESS;
    }}
    PageUtil如下:
    public class StudentsPageUtil extends ActionSupport {
    private Session s = null;
    private List list;
    public static int totalPage;// 页面总数
    private int totalCount;// 用户总数
    private int pageSize;// 每页显示数据量
    public static int currentPage;// 当前页码数 public StudentsPageUtil() {
    // 找到hibernate配置文件
    Configuration config = new Configuration().configure();
    // 从配置文件中取出SessionFactory
    SessionFactory factory = config.buildSessionFactory();
    // 从SessionFactory中取session
    this.s = factory.openSession();
    //this.s = HibernateSessionFactory .createSession() ;
    } /*
     * 功 能:获取总记录数 参 数:持久化对象名 返回值:int
     */
    public int getUserTotalCount(String tablename) {
    SubjectInfoPageUtil page = new SubjectInfoPageUtil();

    Query q = s.createQuery("select count(*) from " + tablename);
    List ll = q.list();
    Integer a = (Integer) ll.get(0);
    return a.intValue();
    }
    public int getTotalPage(int pageSize) {
    totalCount = getUserTotalCount("Subject[/color[color=#FF0000]]");//求表Subject
    totalPage = ((totalCount + pageSize) - 1) / pageSize;
    return totalPage;
    } /*
     * 功 能:分页显示数据 参 数:hql , pageNum-第几页 , pageSize-每页条数 返回值:List
     */
    public List pagination(String hql, int pageNum, int pageSize) {
    int numBegin = 0;
    if (pageNum < 1) {
    numBegin = 0;
    } else {
    numBegin = (pageNum - 1) * pageSize;
    }
    List retList = new ArrayList();
    try {
    Query query = s.createQuery(hql);
    query.setFirstResult(numBegin);
    query.setMaxResults(pageSize);
    retList = query.list();
    return retList;
    } catch (HibernateException e) {
    e.printStackTrace();
    } finally {
    try {
    // HibernateSessionFactory .closeSession() ;
    } catch (HibernateException e) {
    e.printStackTrace();
    }
    }
    return retList;
    } public List QueryList(String hql){
    pageSize = 9;
    HttpServletRequest request = ServletActionContext.getRequest();
    String pageString = request.getParameter("page");
    if (pageString == null || pageString.length() == 0) {
    pageString = "1";
    }
    currentPage = 0;
    try {
    currentPage = Integer.parseInt(pageString);
    } catch (Exception e) {
    e.printStackTrace();
    }
    if (currentPage == 0) {
    currentPage = 1;
    }
    totalPage = getTotalPage(pageSize);
    totalCount = getTotalCount();
    currentPage = currentPage;
    list = this.pagination(hql, currentPage, pageSize);
    return list;
    } public int getTotalPage() {
    return totalPage;
    } public void setTotalPage(int totalPage) {
    this.totalPage = totalPage;
    } public int getTotalCount() {
    return totalCount;
    } public void setTotalCount(int totalCount) {
    this.totalCount = totalCount;
    } public int getPageSize() {
    return pageSize;
    } public void setPageSize(int pageSize) {
    this.pageSize = pageSize;
    } public int getCurrentPage() {
    return currentPage;
    } public void setCurrentPage(int currentPage) {
    this.currentPage = currentPage;
    } public List getList() {
    return list;
    } public void setList(List list) {
    this.list = list;
    }}下面是页面取值
    <table width="696" class="datalist" summary="list of members in EE Studay">
        <tr >
     <th width="47" scope="col">排序</th>
            <th width="290" scope="col">教师名称</th>

     
            <th width="80" scope="col">题目总数</th>
     <th width="58" scope="col">已选人数</th>
      <th width="80" scope="col">剩余题目数</th>
         
            
    </tr>
      <%
      int i=1;
       %>
      <s:iterator id="ls" value="list" status="st"> <tr>
     <td><%=i++ %><br></td>

            <td><s:property value="%{teachers.teaName}//这个能显示出来"/> </td>

     <td>
              求题目总数 ????????????? </td>
                <td>?已选人数?????????????????
                </td>
      <td> 剩余题目数????????????????
       </td>
           <tr>
    </s:iterator>
        
    </table>
    </form>
    第<s:property value="%{currentpage}"/> 页 / 
                  共<s:property value="t_totalpage"/> 页 
        <a href="allTeachers.action">首页</a>
        <s:if test="currentpage>1">
        [<a href="allTeachers.action?page=${currentpage-1}">上一页</a>]    </s:if>
        <s:if test="currentpage<=1">
        [上一页]    </s:if>
        <s:if test="currentpage<t_totalpage">
        [<a href="allTeachers.action?page=${currentpage+1}">下一页</a>]    </s:if>
        <s:if test="currentpage>=t_totalpage">
        [下一页]    </s:if>
        <a href="allTeachers.action?page=${t_totalpage}">尾页</a>
    现在就是不知道怎么写HQL语句,然后能在页面取值,还能分页,请大家帮忙!
      

  5.   

    就是要问:
    subjectinfo{subId,teaId,stuId,subName}题目表 
    teachers{teaId,stuName}教师表 
    students{stuId,stuName}学生表 

    现在想在页面显示所有教师信息的一个表格,标题为:教师名称  教师题目总数  已选题学生总数 未选题学生数  操作请问我该怎么求值?然后在页面怎么去结果显示出来呢?
    可以用 <td "> <s:property value="%{teachers.teaName }"/> </td> // 得到老师名称 因为分页的时候求了subjectinfo,所有直接使用teachers.teaName取值 
          <td "> <s:property value="%{subjectinfos.teaName }"/> </td> 这个总数就不知道怎么取了。希望大家赐教!
      

  6.   

     <td "> <s:property value="%{subjectinfos.teaName }"/> </td> 这个总数就不知道怎么取了。 
      

  7.   

    不知道大家有什么好的分页方式没有?就是struts2+hibernate的
      

  8.   

    学生ID是这样取:subject.student.id
      

  9.   

    我也刚答辩完,用的也是struts2和hibernate,如果用hql实在想不到表达的方法,就用sql吧