0

私はhibernate4で作成されたデータベースの次の構造を持っています:

DEPARTMENT (フィールド: DEPARTMENT_ID および DEPARTMENT_NAME) を DEPARTMENT_INSTITUTE (DEPARTMENT_ID および INSTITUTE_ID を持つ) を介して INSTITUTE (INSTITUTE_ID および INSTITUTE_NAME を持つ) に接続し、後で INSTITUTE_TEACHER (ID によって) を介して TEACHER (TEACHER_ID、NAME、SURNAME、TITLE) に接続します。 )。

すべてが 1 対多の関係にあるため、1 つの学科に多くの機関があり、1 つの機関に多くの教師がいる場合があります。

基本的にすべてをオブジェクトに入れ、JSTL を使用して 1 つのドロップダウン メニューに入れたいと思います (ドロップダウン リストにはいくつかのレベルが必要ではなく、すべて同じレベルにすることができます)。問題は、私が知らないことです:

  • それらすべてのデータを照会して 1 つのリストに入れる方法、

  • 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なので、基本的に部門クラス内にはインスティテュートを含む HashSet であり、インスティテュートには教師を含むハッシュセットがあります。ご回答ありがとうございます。

4

1 に答える 1

0

基本的にすべてをオブジェクトに入れ、JSTL を使用して 1 つのドロップダウン メニューに入れたいと思います (ドロップダウン リストにはいくつかのレベルが必要ではなく、すべて同じレベルにすることができます)。

リストの代わりにマップを使用して、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());

mapこれをに追加しますrequest

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 に答える