有个学生表stu{stuid,stuname }题目表sub{sid,stuid,subname}
sub中:
 <many-to-one name="stu" class="hibernate.model.Stu" fetch="join" lazy="false">
            <column name="stuid" />
        </many-to-one>stu中为 :
 <set inverse="true" name="sub" sort="unsorted">
   <key>
    <column name="stuid"/>
   </key>
   <one-to-many class="hibernate.model.Sub"/>  </set>
我想通过一个表格显示出所有学生信息,但是我不知道怎样显示出该学生是否选了题目,也就是怎样确定学生在题目表里是否有自己的stuid存在,存在的话我的表格中就显示该生在题目表中所对应的题目。目前我只查找了学生这个表,所以只得到学生个人信息而并不能得到自己的题目信息。如果没有题目就显示无,有的话就该显示题目名称,不知道怎么来,请大家帮忙!

解决方案 »

  1.   

    Stu stu=(Stu)s.createQuery("from Stu u where u.stuid=?")
    .setString(0, "u001").uniqueResult();
    之后遍历你的集合输出就可以得到和学生关联的选题了
      

  2.   

    我需要分页的
    public class ShowAction extends ActionSupport {
    @Override
    public String execute() throws Exception {
    StudentsPageUtil page = new StudentsPageUtil();
    String hql="from Stu";这样我在页面该怎么去该学生所选的题目名称?
    list = page .QueryList(hql);
    this.t_totalpage=page.totalPage;
    this.currentpage=page.currentPage;
    return SUCCESS ;
    }
    get() set(0).....

    Stu stu=(Stu)s.createQuery("from Stu u where u.stuid=?") 
    .setString(0, "u001").uniqueResult(); 
    之后遍历你的集合输出就可以得到和学生关联的选题了 
    请问这段代码我该在哪写?我不需要传stuid了吧?麻烦您再说得详细一点,谢谢
      

  3.   

    你的学生类中应该有一个题目集合假定是Set<Questions> questions
    把学生查出来,得到学生对象以后,直接用getQuestions()方法就可以得到该集合就是该生所选的题目。
    这就是Hibernate的好处,不用考虑数据库结构,面向对象的方法直观得得到想要的结果。
    通常这种操作会遇到session已经关闭的异常。
    这是因为查学生的时候没有把题目查出来。在查学生session关闭前访问一下学生的题目。就可以了。通过“from Stu”HQL语句得到List<Stu>。遍历里面每个学生,使用学生对象的getQuestions()方法来得到题目的集合
      

  4.   

    学生类有private Set sub = new HashSet(0);
      

  5.   

    原来这样,这是因为查学生的时候没有把题目查出来。在查学生session关闭前访问一下学生的题目。就可以了。