0

私は学校の時間割が関連しているソフトウェアに取り組んでいます。以下はシナリオです。

クラス(たとえば 12M1 )には科目のリストがあります。クラスはセクション (数学セクションなど) に属し、セクションには一連の科目も含まれます。セクション内のすべてのクラスで、セクションの科目も教えられます。セクションは学年 (学年 12 など) に属し、学年には科目もあります。セクション内のすべてのクラスでは、セクションの学年の科目も教えられます。

私がしなければならないことは、各クラスで教えられている科目のリストを取得することです。

これは、複数のクエリと反復を使用して実行できることがわかります。例えば

  • 各クラスについて、まず科目のリストを取得します。
  • 次に、そのセクションから件名を取得し、リストに追加します。
  • 次に、そのセクションの成績から科目を取得し、リストに追加します。

これを行うためのより良い/よりクリーンな方法はありますか? たとえば、単一のクエリを使用していますか? 休止状態または SQL を使用していますか?

4

1 に答える 1

1

クラスのすべての科目

DetachedCritiera subjects = DetachedCritiera.for(Class.class)
    .add(Expression.eq("id", classId))
    .createAlias("subjects", "subject")
    .setProjection(Projections.Property("subject.Id"));

DetachedCritiera sectrionSubjects = DetachedCritiera.for(Class.class)
    .add(Expression.eq("id", classId))
    .createAlias("section", "section")
    .createAlias("section.subjects", "subject")
    .setProjection(Projections.Property("subject.Id"));

DetachedCritiera gradeSubjects = DetachedCritiera.for(Class.class)
    .add(Expression.eq("id", classId))
    .createAlias("grade", "grade")
    .createAlias("grade.subjects", "subject")
    .setProjection(Projections.Property("subject.Id"));

List<Subject> allSubjectsOfClass = session.createCriteria(Subject.class)
    .add(new Disjunction()
        .add(Subqueries.in("id", subjects))
        .add(Subqueries.in("id", sectrionSubjects))
        .add(Subqueries.in("id", gradeSubjects))
    )
    .list<Subject>();
于 2012-05-08T08:17:49.413 に答える