0

我在hibernate4中创建了以下数据库结构:

我通过 DEPARTMENT_INSTITUTE(具有 DEPARTMENT_ID 和 INSTITUTE_ID)与 INSTITUTE(具有 INSTITUTE_ID 和 INSTITUTE_NAME)连接的 DEPARTMENT(具有字段:DEPARTMENT_ID 和 DEPARTMENT_NAME),后来通过 INSTITUTE_TEACHER(由 Id 再次)与 TEACHER(TEACHER_ID、NAME、SURNAME、TITLE)连接)。

这都是一对多的关系,所以一个部门可以有很多研究所,一个研究所可以有很多老师。

我想基本上把它全部放到一个对象中,并通过JSTL把它放到一个下拉菜单中(下拉列表不需要有几个级别,它可以都在同一级别上)。问题是,我不知道:

  • 如何查询所有这些数据并将它们放入一个列表中,

  • 在 JSP 中使用 JSTL 将它们放在下拉菜单中。

    谁能告诉我我该怎么做?我很想明白这一点。这是查询“一切”的方法的框架:

[编辑]所以在这里我做了一个从数据库查询的方法,如果有人可以看看它是否是好的解决方案,我将不胜感激

    public List<String> enlistEverything(){
    Session session = sessionFactory.openSession();
    Transaction tx = null;
    List<String> toView = new ArrayList<String>();
    try{
        tx = session.beginTransaction();
        HashSet<Department> departments = (HashSet<Department>)session.createQuery("FROM Department").list();
        HashSet<Institute> institutes = new HashSet<Institute>();
        HashSet<Teacher> teachers = new HashSet<Teacher>();
        
        for(Department d : departments){
            toView.add(d.getDepartmentName());
            institutes.addAll(d.getInstitutes());

        }
        for(Institute i : institutes){
            toView.add(i.getInstituteName());
            teachers.addAll(i.getTeachers());
    }
    for(Teacher t : teachers){
            toView.add(t.getTeacherTitle() + t.getTeacherName() + t.getTeacherSurname());
        }
    }catch(HibernateException e){
        if (tx!=null) tx.rollback();
        e.printStackTrace();
    } finally {
        session.close();
    }
    return toView;
    }

我已经使用这个特定的教程完成了数据模型:http ://www.dzone.com/tutorials/java/hibernate/hibernate-example/hibernate-mapping-one-to-many-1.html所以基本上在部门类里面有一个带有研究所的哈希集,在研究所中有一个带有教师的哈希集。预先感谢您的回答。

4

1 回答 1

0

我想基本上把它全部放到一个对象中,并通过JSTL把它放到一个下拉菜单中(下拉列表不需要有几个级别,它可以都在同一级别上)。

使用toView地图而不是列表来保留所有要放入下拉菜单的键值对。

Map<String,String> toView = new LinkedHashMap<String,String>();
..
..
toView.put(d.getDepartmentId()+"dept",d.getDepartmentName());
toView.put(i.getInstituteId()+"inst",i.getInstituteName());
toView.put(t.getTeacherId()+"teach",t.getTeacherTitle() + t.getTeacherName() + t.getTeacherSurname());

将此添加maprequest

Map<String, String> toView = YourDataProvider.enlistEverything();
request.setAttribute("toView", toView);

现在在 JSP 中,使用它来将值放在下拉菜单中:

<select name="mapData">
    <c:forEach items="${toView}" var="data">
        <option value="${data.key}">${data.value}</option>
    </c:forEach>
</select>
于 2013-09-25T04:14:13.603 回答