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 回答