2012-05-07 64 views
0

我正在研究一所學校的時間表相關的軟件。以下是該場景。如何使用Hibernate或SQL完成這項工作?

一個類(比如12M1)有一個主題列表。一個班級屬於一個部分(比如說數學部分),而一個部分也包含一組主題。在該部分的所有課程中,還會教授該部分的科目。一節屬於一個等級(比如12年級),一個等級也有學科。在一節中的所有課程中,也會教授該部分的年級科目。

我需要得到什麼做的是獲得每班教授的科目列表。

我可以看到,這可以使用多個查詢和迭代來完成。 例如

  • 爲每個類首先獲取其主題列表。
  • 然後從其部分獲取主題並添加到列表中。
  • 然後形成它的部分的等級獲得主題並添加到列表中。

是否有這樣做的更好/更清潔的方式? 例如使用單個查詢? 使用hibernate或SQL?

回答

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>(); 
相關問題