2017-01-11 12 views
0

iが対象のIDで供給されるであろうに件名の詳細を取得のREST APIについてエンティティ巨大なクエリは、

public class Subject { 

    private int id; 
    private String name; 
    private List<Teacher> teacher; 
    private List<Book> books; 
    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public List<Teacher> getTeacher() { 
     return teacher; 
    } 
    public void setTeacher(List<Teacher> teacher) { 
     this.teacher = teacher; 
    } 
    public List<Book> getBooks() { 
     return books; 
    } 
    public void setBooks(List<Book> books) { 
     this.books = books; 
    } 

} 

があるとし、複数の単一のクエリ対合流します。

教師とリストのリストをそれに加えて と一緒に取り出す必要があります。それはパフォーマンスを賢明にし、柔軟性に賢明です。

(1)単一のクエリは

パフォーマンス、エンティティ建物ロジックを考慮してくださいフィルタとしてsubject_idと書籍のためのフィルター、その後1つのクエリとしてsubject_idと教師のためのユーザその後、1つのクエリの (2)1つのクエリに参加しますたとえば柔軟性を考慮して変更する。同じAPIユーザでは、書籍リストを含むかどうかを応答するためのフラグを提供することができます。 また、エンタープライズプロジェクトでどのような方法を使用するかが決定されます。

+0

一般的に、データベースへの往復回数は少ない方が良いですが、不確実性が生じた場合は、簡単なテストで答えが – Strawberry

+0

になります。唯一の答えは「それに依存します」です。 –

答えて

2

それは、最悪の場合には... Subjectによって

  • どのように多くのTeacherに依存?
  • 最悪の場合、どれくらいBookによってSubjectになりますか?
  • 最悪の場合、どれくらい多くのSubjectがありますか?
  • 他のリンクされたエンティティはありますか?

応答が10, 50, 1000, noの場合、結果は500,000行(10 * 50 * 1000)を返す可能性があります。デカルト積が問題とされていない場合

さてあなたは、デカルト積

検討すべきである、高速で参加。