2017-07-31 11 views
0

トピック、サブジェクト、カテゴリの3つのエンティティがあります。サブジェクトとトピックを含むすべてのカテゴリを取得しながら、各エンティティのID列と名前列をプリフェッチする方法はありますか。パフォーマンスに影響を与えるので、私は他のフィールドは必要ありません。ネストされたコレクションの投影

@Entity 
class Topic{ 
    private Long id; 
    private String name; 
    ... 
    //other fields 
} 

@Entity 
class Subject{ 
    private Long id; 
    private String name; 
    ... 
//other fields 

    @OneToMany(fetch=FetchType.LAZY) 
    private List<Topic> topics; 
} 

@Entity 
class Category{ 
    private Long id; 
    private String name; 
    ... 
    //other fields 
    @OneToMany(fetch=FetchType.LAZY) 
    private List<Subject> subjects; 
} 

答えて

0

結果セットの処理が容易になるので、投影自体の上に結果クラスを作成することをお勧めします。 ResultClassには、関連するクエリ結果フィールドを持つコンストラクタが必要です。クエリ自体に完全修飾名を使用する必要があります。その後

select new org.mypkg.ResultClass(c.id, c.name, s.id, s.name, t.id, t.name) 
from Category c 
    inner join c.subjects s 
    inner join s.topics 

単にあなた:

List<ResultClass> results = em.createQuery(query).list(); 
+0

おかげで、しかし、問題がある:私は手動で、その後、グループの被験者と話題にしています – romanvintonyak

関連する問題